Mercurial > pidgin
annotate libpurple/core.c @ 17709:176d0fc8bc16
Alternative dbus_uniq implementation
author | Gabriel Schulhof <nix@go-nix.ca> |
---|---|
date | Tue, 15 May 2007 20:41:36 +0000 |
parents | f8f78fa7e774 |
children | 601594a64190 |
rev | line source |
---|---|
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /** |
15822 | 2 * @file core.c Purple Core API |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * @ingroup core |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4 * |
15822 | 5 * purple |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
6 * |
15822 | 7 * Purple is the legal property of its developers, whose names are too numerous |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 * to list here. Please refer to the COPYRIGHT file distributed with this |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 * source distribution. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 * This program is free software; you can redistribute it and/or modify |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * it under the terms of the GNU General Public License as published by |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * the Free Software Foundation; either version 2 of the License, or |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 * This program is distributed in the hope that it will be useful, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
20 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 * You should have received a copy of the GNU General Public License |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
22 * along with this program; if not, write to the Free Software |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
24 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
25 #include "internal.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
26 #include "cipher.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
27 #include "connection.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
28 #include "conversation.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 #include "core.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 #include "debug.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 #include "dnsquery.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 #include "ft.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 #include "idle.h" |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16341
diff
changeset
|
34 #include "imgstore.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 #include "network.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
36 #include "notify.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
37 #include "plugin.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
38 #include "pounce.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
39 #include "prefs.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
40 #include "privacy.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 #include "proxy.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
42 #include "savedstatuses.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
43 #include "signals.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
44 #include "sound.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 #include "sslconn.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
46 #include "status.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
47 #include "stun.h" |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
48 #include "util.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
49 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
50 #ifdef HAVE_DBUS |
17709
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
51 # define DBUS_API_SUBJECT_TO_CHANGE |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
52 # include <dbus/dbus.h> |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
53 # include "dbus-purple.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
54 # include "dbus-server.h" |
17709
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
55 # include "dbus-bindings.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
56 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
57 |
15822 | 58 struct PurpleCore |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
60 char *ui; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
61 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
62 void *reserved; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
63 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
64 |
15822 | 65 static PurpleCoreUiOps *_ops = NULL; |
66 static PurpleCore *_core = NULL; | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
68 STATIC_PROTO_INIT |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
69 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
70 gboolean |
15822 | 71 purple_core_init(const char *ui) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
72 { |
15822 | 73 PurpleCoreUiOps *ops; |
74 PurpleCore *core; | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
75 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
76 g_return_val_if_fail(ui != NULL, FALSE); |
15822 | 77 g_return_val_if_fail(purple_get_core() == NULL, FALSE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
78 |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
79 #ifdef ENABLE_NLS |
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
80 bindtextdomain(PACKAGE, LOCALEDIR); |
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
81 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
82 #ifdef _WIN32 |
15822 | 83 wpurple_init(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
84 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
85 |
15822 | 86 _core = core = g_new0(PurpleCore, 1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
87 core->ui = g_strdup(ui); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
88 core->reserved = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
89 |
15822 | 90 ops = purple_core_get_ui_ops(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
91 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
92 /* The signals subsystem is important and should be first. */ |
15822 | 93 purple_signals_init(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
94 |
15822 | 95 purple_signal_register(core, "uri-handler", |
96 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER, | |
97 purple_value_new(PURPLE_TYPE_BOOLEAN), 3, | |
98 purple_value_new(PURPLE_TYPE_STRING), /* Protocol */ | |
99 purple_value_new(PURPLE_TYPE_STRING), /* Command */ | |
100 purple_value_new(PURPLE_TYPE_BOXED, "GHashTable *")); /* Parameters */ | |
15612
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15373
diff
changeset
|
101 |
15822 | 102 purple_signal_register(core, "quitting", purple_marshal_VOID, NULL, 0); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
103 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
104 /* The prefs subsystem needs to be initialized before static protocols |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
105 * for protocol prefs to work. */ |
15822 | 106 purple_prefs_init(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
107 |
15822 | 108 purple_debug_init(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
109 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
110 if (ops != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
111 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
112 if (ops->ui_prefs_init != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
113 ops->ui_prefs_init(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
114 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
115 if (ops->debug_ui_init != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
116 ops->debug_ui_init(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
117 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
118 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
119 #ifdef HAVE_DBUS |
15822 | 120 purple_dbus_init(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
121 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
122 |
16591
976a9b4c336a
Part of the patch in ticket #383:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16540
diff
changeset
|
123 purple_ciphers_init(); |
976a9b4c336a
Part of the patch in ticket #383:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16540
diff
changeset
|
124 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
125 /* Initialize all static protocols. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
126 static_proto_init(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
127 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
128 /* Since plugins get probed so early we should probably initialize their |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
129 * subsystem right away too. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
130 */ |
15822 | 131 purple_plugins_init(); |
132 purple_plugins_probe(G_MODULE_SUFFIX); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
133 |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16341
diff
changeset
|
134 /* The buddy icon code uses the imgstore, so init it early. */ |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16341
diff
changeset
|
135 purple_imgstore_init(); |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16341
diff
changeset
|
136 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
137 /* Accounts use status and buddy icons, so initialize these before accounts */ |
15822 | 138 purple_status_init(); |
139 purple_buddy_icons_init(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
140 |
15822 | 141 purple_accounts_init(); |
142 purple_savedstatuses_init(); | |
143 purple_notify_init(); | |
144 purple_connections_init(); | |
145 purple_conversations_init(); | |
146 purple_blist_init(); | |
147 purple_log_init(); | |
148 purple_network_init(); | |
149 purple_privacy_init(); | |
150 purple_pounces_init(); | |
151 purple_proxy_init(); | |
152 purple_dnsquery_init(); | |
153 purple_sound_init(); | |
154 purple_ssl_init(); | |
155 purple_stun_init(); | |
156 purple_xfers_init(); | |
157 purple_idle_init(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
158 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
159 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
160 * Call this early on to try to auto-detect our IP address and |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
161 * hopefully save some time later. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
162 */ |
15822 | 163 purple_network_get_my_ip(-1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
164 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
165 if (ops != NULL && ops->ui_init != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
166 ops->ui_init(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
167 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
168 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
169 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
170 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
171 void |
15822 | 172 purple_core_quit(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
173 { |
15822 | 174 PurpleCoreUiOps *ops; |
175 PurpleCore *core = purple_get_core(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
176 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
177 g_return_if_fail(core != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
178 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
179 /* The self destruct sequence has been initiated */ |
15822 | 180 purple_signal_emit(purple_get_core(), "quitting"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
181 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
182 /* Transmission ends */ |
15822 | 183 purple_connections_disconnect_all(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
184 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
185 /* Save .xml files, remove signals, etc. */ |
15822 | 186 purple_idle_uninit(); |
187 purple_ssl_uninit(); | |
188 purple_pounces_uninit(); | |
189 purple_blist_uninit(); | |
190 purple_ciphers_uninit(); | |
191 purple_notify_uninit(); | |
192 purple_conversations_uninit(); | |
193 purple_connections_uninit(); | |
194 purple_buddy_icons_uninit(); | |
195 purple_accounts_uninit(); | |
196 purple_savedstatuses_uninit(); | |
197 purple_status_uninit(); | |
198 purple_prefs_uninit(); | |
199 purple_xfers_uninit(); | |
200 purple_proxy_uninit(); | |
201 purple_dnsquery_uninit(); | |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16341
diff
changeset
|
202 purple_imgstore_uninit(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
203 |
15822 | 204 purple_debug_info("main", "Unloading all plugins\n"); |
205 purple_plugins_destroy_all(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
206 |
15822 | 207 ops = purple_core_get_ui_ops(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
208 if (ops != NULL && ops->quit != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
209 ops->quit(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
210 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
211 /* |
15822 | 212 * purple_sound_uninit() should be called as close to |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
213 * shutdown as possible. This is because the call |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
214 * to ao_shutdown() can sometimes leave our |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
215 * environment variables in an unusable state, which |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
216 * can cause a crash when getenv is called (by gettext |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
217 * for example). See the complete bug report at |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
218 * http://trac.xiph.org/cgi-bin/trac.cgi/ticket/701 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
219 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
220 * TODO: Eventually move this call higher up with the others. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
221 */ |
15822 | 222 purple_sound_uninit(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
223 |
15822 | 224 purple_plugins_uninit(); |
225 purple_signals_uninit(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
226 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
227 #ifdef HAVE_DBUS |
15822 | 228 purple_dbus_uninit(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
229 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
230 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
231 g_free(core->ui); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
232 g_free(core); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
233 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
234 #ifdef _WIN32 |
15822 | 235 wpurple_cleanup(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
236 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
237 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
238 _core = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
239 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
240 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
241 gboolean |
15822 | 242 purple_core_quit_cb(gpointer unused) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
243 { |
15822 | 244 purple_core_quit(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
245 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
246 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
247 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
248 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
249 const char * |
15822 | 250 purple_core_get_version(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
251 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
252 return VERSION; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
253 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
254 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
255 const char * |
15822 | 256 purple_core_get_ui(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
257 { |
15822 | 258 PurpleCore *core = purple_get_core(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
259 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
260 g_return_val_if_fail(core != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
261 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
262 return core->ui; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
263 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
264 |
15822 | 265 PurpleCore * |
266 purple_get_core(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
267 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
268 return _core; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
269 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
270 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
271 void |
15822 | 272 purple_core_set_ui_ops(PurpleCoreUiOps *ops) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
273 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
274 _ops = ops; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
275 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
276 |
15822 | 277 PurpleCoreUiOps * |
278 purple_core_get_ui_ops(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
279 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
280 return _ops; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
281 } |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
282 |
17709
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
283 #ifdef HAVE_DBUS |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
284 static char *purple_dbus_owner_user_dir(void) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
285 { |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
286 DBusMessage *msg = NULL, *reply = NULL; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
287 DBusConnection *dbus_connection = NULL; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
288 DBusError dbus_error; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
289 char *remote_user_dir = NULL; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
290 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
291 if (NULL == (dbus_connection = purple_dbus_get_connection())) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
292 return NULL; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
293 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
294 if (NULL == (msg = dbus_message_new_method_call(DBUS_SERVICE_PURPLE, DBUS_PATH_PURPLE, DBUS_INTERFACE_PURPLE, "PurpleUserDir"))) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
295 return NULL; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
296 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
297 dbus_error_init(&dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
298 reply = dbus_connection_send_with_reply_and_block(dbus_connection, msg, 5000, &dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
299 dbus_message_unref(msg); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
300 dbus_error_free(&dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
301 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
302 if (NULL != reply) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
303 { |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
304 dbus_error_init(&dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
305 dbus_message_get_args(reply, &dbus_error, DBUS_TYPE_STRING, &remote_user_dir, DBUS_TYPE_INVALID); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
306 if (NULL != remote_user_dir) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
307 remote_user_dir = g_strdup(remote_user_dir); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
308 dbus_error_free(&dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
309 dbus_message_unref(reply); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
310 } |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
311 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
312 return remote_user_dir; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
313 } |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
314 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
315 static void purple_dbus_owner_show_buddy_list(void) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
316 { |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
317 DBusError dbus_error; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
318 DBusMessage *msg = NULL, *reply = NULL; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
319 DBusConnection *dbus_connection = purple_dbus_get_connection(); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
320 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
321 if (NULL == dbus_connection) return; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
322 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
323 if (NULL == (msg = dbus_message_new_method_call(DBUS_SERVICE_PURPLE, DBUS_PATH_PURPLE, DBUS_INTERFACE_PURPLE, "PurpleBlistShow"))) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
324 return ; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
325 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
326 dbus_error_init(&dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
327 if (NULL != (reply = dbus_connection_send_with_reply_and_block(dbus_connection, msg, 5000, &dbus_error))) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
328 dbus_message_unref(msg); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
329 dbus_error_free(&dbus_error); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
330 } |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
331 #endif /* HAVE_DBUS */ |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
332 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
333 gboolean purple_core_ensure_single_instance() |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
334 { |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
335 gboolean is_single_instance = TRUE; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
336 #ifdef HAVE_DBUS |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
337 if (is_single_instance) /* in the future, other mechanisms might have already set this to FALSE */ |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
338 if (!purple_dbus_is_owner()) { |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
339 const char *user_dir = purple_user_dir(); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
340 char *dbus_owner_user_dir = purple_dbus_owner_user_dir(); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
341 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
342 if (NULL == user_dir && NULL != dbus_owner_user_dir) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
343 is_single_instance = TRUE; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
344 else |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
345 if (NULL != user_dir && NULL == dbus_owner_user_dir) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
346 is_single_instance = TRUE; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
347 else |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
348 if (NULL == user_dir && NULL == dbus_owner_user_dir) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
349 is_single_instance = FALSE; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
350 else |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
351 is_single_instance = strcmp(dbus_owner_user_dir, user_dir); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
352 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
353 if (!is_single_instance) |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
354 purple_dbus_owner_show_buddy_list(); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
355 |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
356 g_free(dbus_owner_user_dir); |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
357 } |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
358 #endif /* HAVE_DBUS */ |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
359 return is_single_instance; |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
360 } |
176d0fc8bc16
Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents:
16691
diff
changeset
|
361 |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
362 static gboolean |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
363 move_and_symlink_dir(const char *path, const char *basename, const char *old_base, const char *new_base, const char *relative) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
364 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
365 char *new_name = g_build_filename(new_base, basename, NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
366 #ifndef _WIN32 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
367 char *old_name; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
368 #endif |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
369 if (g_rename(path, new_name)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
370 { |
16691 | 371 purple_debug_error("core", "Error renaming %s to %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
372 path, new_name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
373 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
374 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
375 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
376 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
377 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
378 #ifndef _WIN32 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
379 /* NOTE: This new_name is relative. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
380 new_name = g_build_filename(relative, basename, NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
381 old_name = g_build_filename(old_base, basename, NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
382 if (symlink(new_name, old_name)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
383 { |
16691 | 384 purple_debug_warning("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
385 old_name, new_name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
386 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
387 g_free(old_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
388 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
389 #endif |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
390 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
391 return TRUE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
392 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
393 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
394 gboolean |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
395 purple_core_migrate(void) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
396 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
397 const char *user_dir = purple_user_dir(); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
398 char *old_user_dir = g_strconcat(purple_home_dir(), |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
399 G_DIR_SEPARATOR_S ".gaim", NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
400 char *status_file; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
401 FILE *fp; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
402 GDir *dir; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
403 GError *err; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
404 const char *entry; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
405 #ifndef _WIN32 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
406 char *logs_dir; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
407 #endif |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
408 char *old_icons_dir; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
409 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
410 if (!g_file_test(old_user_dir, G_FILE_TEST_EXISTS)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
411 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
412 /* ~/.gaim doesn't exist, so there's nothing to migrate. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
413 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
414 return TRUE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
415 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
416 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
417 status_file = g_strconcat(user_dir, G_DIR_SEPARATOR_S "migrating", NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
418 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
419 if (g_file_test(user_dir, G_FILE_TEST_EXISTS)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
420 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
421 /* If we're here, we have both ~/.gaim and .purple. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
422 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
423 if (!g_file_test(status_file, G_FILE_TEST_EXISTS)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
424 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
425 /* There's no "migrating" status file, |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
426 * so ~/.purple is all up to date. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
427 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
428 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
429 return TRUE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
430 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
431 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
432 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
433 /* If we're here, it's time to migrate from ~/.gaim to ~/.purple. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
434 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
435 /* Ensure the user directory exists */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
436 if (!g_file_test(user_dir, G_FILE_TEST_IS_DIR)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
437 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
438 if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
439 { |
16691 | 440 purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
441 user_dir, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
442 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
443 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
444 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
445 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
446 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
447 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
448 /* This writes ~/.purple/migrating, which allows us to detect |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
449 * incomplete migrations and properly retry. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
450 if (!(fp = g_fopen(status_file, "w"))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
451 { |
16691 | 452 purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
453 status_file, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
454 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
455 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
456 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
457 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
458 fclose(fp); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
459 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
460 /* Open ~/.gaim so we can loop over its contents. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
461 err = NULL; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
462 if (!(dir = g_dir_open(old_user_dir, 0, &err))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
463 { |
16691 | 464 purple_debug_error("core", "Error opening directory %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
465 status_file, |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
466 (err ? err->message : "Unknown error")); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
467 if (err) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
468 g_error_free(err); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
469 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
470 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
471 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
472 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
473 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
474 /* Loop over the contents of ~/.gaim */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
475 while ((entry = g_dir_read_name(dir))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
476 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
477 char *name = g_build_filename(old_user_dir, entry, NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
478 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
479 #ifndef _WIN32 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
480 /* Deal with symlinks... */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
481 if (g_file_test(name, G_FILE_TEST_IS_SYMLINK)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
482 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
483 /* We're only going to duplicate a logs symlink. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
484 if (!strcmp(entry, "logs")) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
485 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
486 char buf[MAXPATHLEN]; |
16596
99e786de5bd5
#386: readlink does not append NUL to the end of buffer
Ka-Hing Cheung <khc@hxbc.us>
parents:
16591
diff
changeset
|
487 size_t linklen; |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
488 |
16596
99e786de5bd5
#386: readlink does not append NUL to the end of buffer
Ka-Hing Cheung <khc@hxbc.us>
parents:
16591
diff
changeset
|
489 if ((linklen = readlink(name, buf, sizeof(buf) - 1) == -1)) |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
490 { |
16691 | 491 purple_debug_error("core", "Error reading symlink %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
492 name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
493 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
494 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
495 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
496 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
497 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
498 } |
16596
99e786de5bd5
#386: readlink does not append NUL to the end of buffer
Ka-Hing Cheung <khc@hxbc.us>
parents:
16591
diff
changeset
|
499 buf[linklen] = '\0'; |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
500 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
501 logs_dir = g_strconcat(user_dir, G_DIR_SEPARATOR_S "logs", NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
502 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
503 if (!strcmp(buf, "../.purple/logs") || !strcmp(buf, logs_dir)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
504 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
505 /* If the symlink points to the new directory, we're |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
506 * likely just trying again after a failed migration, |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
507 * so there's no need to fail here. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
508 g_free(logs_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
509 continue; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
510 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
511 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
512 /* In case we are trying again after a failed migration, we need |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
513 * to unlink any existing symlink. If it's a directory, this |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
514 * will fail, and so will the symlink below, which is good |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
515 * because the user should sort things out. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
516 g_unlink(logs_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
517 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
518 /* Relative links will most likely still be |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
519 * valid from ~/.purple, though not it's not |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
520 * guaranteed. Oh well. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
521 if (symlink(buf, logs_dir)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
522 { |
16691 | 523 purple_debug_error("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
524 logs_dir, buf, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
525 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
526 g_free(logs_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
527 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
528 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
529 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
530 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
531 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
532 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
533 g_free(logs_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
534 continue; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
535 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
536 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
537 /* Ignore all other symlinks. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
538 continue; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
539 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
540 #endif |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
541 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
542 /* Deal with directories... */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
543 if (g_file_test(name, G_FILE_TEST_IS_DIR)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
544 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
545 if (!strcmp(entry, "icons")) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
546 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
547 /* This is a special case for the Album plugin, which |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
548 * stores data in the icons folder. We're not copying |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
549 * the icons directory over because previous bugs |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
550 * meant that it filled up with junk for many users. |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
551 * This is a great time to purge it. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
552 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
553 GDir *icons_dir; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
554 char *new_icons_dir; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
555 const char *icons_entry; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
556 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
557 err = NULL; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
558 if (!(icons_dir = g_dir_open(name, 0, &err))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
559 { |
16691 | 560 purple_debug_error("core", "Error opening directory %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
561 name, |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
562 (err ? err->message : "Unknown error")); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
563 if (err) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
564 g_error_free(err); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
565 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
566 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
567 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
568 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
569 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
570 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
571 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
572 new_icons_dir = g_build_filename(user_dir, "icons", NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
573 /* Ensure the new icon directory exists */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
574 if (!g_file_test(new_icons_dir, G_FILE_TEST_IS_DIR)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
575 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
576 if (g_mkdir(new_icons_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
577 { |
16691 | 578 purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
579 new_icons_dir, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
580 g_free(new_icons_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
581 g_dir_close(icons_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
582 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
583 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
584 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
585 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
586 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
587 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
588 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
589 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
590 while ((icons_entry = g_dir_read_name(icons_dir))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
591 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
592 char *icons_name = g_build_filename(name, icons_entry, NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
593 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
594 if (g_file_test(icons_name, G_FILE_TEST_IS_DIR)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
595 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
596 if (!move_and_symlink_dir(icons_name, icons_entry, |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
597 name, new_icons_dir, "../../.purple/icons")) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
598 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
599 g_free(icons_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
600 g_free(new_icons_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
601 g_dir_close(icons_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
602 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
603 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
604 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
605 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
606 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
607 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
608 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
609 g_free(icons_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
610 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
611 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
612 g_dir_close(icons_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
613 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
614 else if (!strcmp(entry, "plugins")) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
615 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
616 /* Do nothing, because we broke plugin compatibility. |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
617 * This means that the plugins directory gets left behind. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
618 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
619 else |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
620 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
621 /* All other directories are moved and symlinked. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
622 if (!move_and_symlink_dir(name, entry, old_user_dir, user_dir, "../.purple")) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
623 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
624 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
625 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
626 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
627 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
628 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
629 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
630 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
631 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
632 else if (g_file_test(name, G_FILE_TEST_IS_REGULAR)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
633 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
634 /* Regular files are copied. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
635 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
636 char *new_name; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
637 FILE *new_file; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
638 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
639 if (!(fp = g_fopen(name, "rb"))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
640 { |
16691 | 641 purple_debug_error("core", "Error opening file %s for reading: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
642 name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
643 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
644 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
645 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
646 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
647 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
648 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
649 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
650 new_name = g_build_filename(user_dir, entry, NULL); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
651 if (!(new_file = g_fopen(new_name, "wb"))) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
652 { |
16691 | 653 purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
654 new_name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
655 fclose(fp); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
656 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
657 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
658 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
659 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
660 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
661 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
662 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
663 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
664 while (!feof(fp)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
665 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
666 unsigned char buf[256]; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
667 size_t size; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
668 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
669 size = fread(buf, 1, sizeof(buf), fp); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
670 if (size != sizeof(buf) && !feof(fp)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
671 { |
16691 | 672 purple_debug_error("core", "Error reading %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
673 name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
674 fclose(new_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
675 fclose(fp); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
676 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
677 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
678 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
679 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
680 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
681 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
682 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
683 |
16482
dec693050305
Proper error checking on fwrite() call
Sean Egan <seanegan@gmail.com>
parents:
16476
diff
changeset
|
684 if (!fwrite(buf, size, 1, new_file) && ferror(new_file) != 0) |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
685 { |
16691 | 686 purple_debug_error("core", "Error writing %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
687 new_name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
688 fclose(new_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
689 fclose(fp); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
690 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
691 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
692 g_dir_close(dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
693 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
694 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
695 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
696 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
697 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
698 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
699 if (fclose(new_file)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
700 { |
16691 | 701 purple_debug_error("core", "Error writing: %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
702 new_name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
703 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
704 if (fclose(fp)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
705 { |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
706 purple_debug_warning("core", "Error closing %s: %s\n", |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
707 name, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
708 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
709 g_free(new_name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
710 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
711 else |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
712 purple_debug_warning("core", "Not a regular file or directory: %s\n", name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
713 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
714 g_free(name); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
715 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
716 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
717 /* The migration was successful, so delete the status file. */ |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
718 if (g_unlink(status_file)) |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
719 { |
16691 | 720 purple_debug_error("core", "Error unlinking file %s: %s. Please report this at http://developer.pidgin.im\n", |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
721 status_file, strerror(errno)); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
722 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
723 return FALSE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
724 } |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
725 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
726 old_icons_dir = g_build_filename(old_user_dir, "icons", NULL); |
16631
f9c369b4291c
Fix up the private function calls to be prefixed with an underscore.
Richard Laager <rlaager@wiktel.com>
parents:
16596
diff
changeset
|
727 _purple_buddy_icon_set_old_icons_dir(old_icons_dir); |
16341
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
728 g_free(old_icons_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
729 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
730 g_free(old_user_dir); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
731 |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
732 g_free(status_file); |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
733 return TRUE; |
786edf5e2144
The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents:
16063
diff
changeset
|
734 } |