annotate libpurple/core.c @ 16375:391a79778f89

Rework the buddy icon subsystem to use the imgstore subsystem, and modify the imgstore subsystem to not require IDs for everything.
author Richard Laager <rlaager@wiktel.com>
date Tue, 24 Apr 2007 03:57:07 +0000
parents 786edf5e2144
children f6acb38ae250
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
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
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
5 * purple
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
51 # include "dbus-server.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
54 struct PurpleCore
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56 char *ui;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 void *reserved;
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
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
61 static PurpleCoreUiOps *_ops = NULL;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
62 static PurpleCore *_core = NULL;
15373
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 STATIC_PROTO_INIT
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
65
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66 gboolean
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
67 purple_core_init(const char *ui)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
68 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
69 PurpleCoreUiOps *ops;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
70 PurpleCore *core;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
71
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
72 g_return_val_if_fail(ui != NULL, FALSE);
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
73 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
74
16063
fa8aeab4ca5a Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents: 15822
diff changeset
75 #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
76 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
77 #endif
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
78 #ifdef _WIN32
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
79 wpurple_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
80 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
82 _core = core = g_new0(PurpleCore, 1);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83 core->ui = g_strdup(ui);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84 core->reserved = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
86 ops = purple_core_get_ui_ops();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
87
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
88 /* The signals subsystem is important and should be first. */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
89 purple_signals_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
91 purple_signal_register(core, "uri-handler",
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
92 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
93 purple_value_new(PURPLE_TYPE_BOOLEAN), 3,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
94 purple_value_new(PURPLE_TYPE_STRING), /* Protocol */
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
95 purple_value_new(PURPLE_TYPE_STRING), /* Command */
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
96 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
97
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
98 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
99
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
100 /* 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
101 * for protocol prefs to work. */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
102 purple_prefs_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
104 purple_debug_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
106 if (ops != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108 if (ops->ui_prefs_init != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109 ops->ui_prefs_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111 if (ops->debug_ui_init != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 ops->debug_ui_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113 }
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 #ifdef HAVE_DBUS
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
116 purple_dbus_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 #endif
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 /* Initialize all static protocols. */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
120 static_proto_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122 /* 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
123 * subsystem right away too.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
124 */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
125 purple_plugins_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
126 purple_plugins_probe(G_MODULE_SUFFIX);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127
16375
391a79778f89 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents: 16341
diff changeset
128 /* 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
129 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
130
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
131 /* Accounts use status and buddy icons, so initialize these before accounts */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
132 purple_status_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
133 purple_buddy_icons_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
135 purple_accounts_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
136 purple_savedstatuses_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
137 purple_ciphers_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
138 purple_notify_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
139 purple_connections_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
140 purple_conversations_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
141 purple_blist_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
142 purple_log_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
143 purple_network_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
144 purple_privacy_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
145 purple_pounces_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
146 purple_proxy_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
147 purple_dnsquery_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
148 purple_sound_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
149 purple_ssl_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
150 purple_stun_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
151 purple_xfers_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
152 purple_idle_init();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
153
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
154 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
155 * 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
156 * hopefully save some time later.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
157 */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
158 purple_network_get_my_ip(-1);
15373
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 if (ops != NULL && ops->ui_init != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
161 ops->ui_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
162
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
163 return TRUE;
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166 void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
167 purple_core_quit(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
169 PurpleCoreUiOps *ops;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
170 PurpleCore *core = purple_get_core();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
171
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
172 g_return_if_fail(core != NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
173
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
174 /* The self destruct sequence has been initiated */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
175 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
176
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
177 /* Transmission ends */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
178 purple_connections_disconnect_all();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
179
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
180 /* Save .xml files, remove signals, etc. */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
181 purple_idle_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
182 purple_ssl_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
183 purple_pounces_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
184 purple_blist_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
185 purple_ciphers_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
186 purple_notify_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
187 purple_conversations_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
188 purple_connections_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
189 purple_buddy_icons_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
190 purple_accounts_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
191 purple_savedstatuses_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
192 purple_status_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
193 purple_prefs_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
194 purple_xfers_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
195 purple_proxy_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
196 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
197 purple_imgstore_uninit();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
198
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
199 purple_debug_info("main", "Unloading all plugins\n");
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
200 purple_plugins_destroy_all();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
201
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
202 ops = purple_core_get_ui_ops();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
203 if (ops != NULL && ops->quit != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
204 ops->quit();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
205
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
206 /*
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
207 * 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
208 * 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
209 * to ao_shutdown() can sometimes leave our
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
210 * environment variables in an unusable state, which
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
211 * 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
212 * 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
213 * 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
214 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
215 * 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
216 */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
217 purple_sound_uninit();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
218
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
219 purple_plugins_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
220 purple_signals_uninit();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
221
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
222 #ifdef HAVE_DBUS
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
223 purple_dbus_uninit();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
225
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
226 g_free(core->ui);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
227 g_free(core);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
229 #ifdef _WIN32
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
230 wpurple_cleanup();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
231 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
232
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
233 _core = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
235
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236 gboolean
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
237 purple_core_quit_cb(gpointer unused)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
239 purple_core_quit();
15373
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 return FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
242 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
243
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
244 const char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
245 purple_core_get_version(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
246 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247 return VERSION;
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
250 const char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
251 purple_core_get_ui(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
252 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
253 PurpleCore *core = purple_get_core();
15373
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 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
256
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
257 return core->ui;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
258 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
260 PurpleCore *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
261 purple_get_core(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
263 return _core;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
266 void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
267 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
268 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
269 _ops = ops;
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
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
272 PurpleCoreUiOps *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15612
diff changeset
273 purple_core_get_ui_ops(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
274 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
275 return _ops;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
276 }
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
277
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
278 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
279 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
280 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
281 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
282 #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
283 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
284 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
285 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
286 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
287 purple_debug_error("core", "Error renaming %s to %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
288 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
289 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
290 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
291 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
292 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
293
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
294 #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
295 /* 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
296 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
297 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
298 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
299 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
300 purple_debug_warning("core", "Error symlinking %s to %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
301 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
302 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
303 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
304 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
305 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
306
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
307 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
308 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
309
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
310 gboolean
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
311 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
312 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
313 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
314 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
315 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
316 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
317 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
318 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
319 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
320 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
321 #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
322 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
323 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
324 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
325
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
326 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
327 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
328 /* ~/.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
329 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
330 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
331 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
332
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
333 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
334
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
335 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
336 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
337 /* 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
338
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
339 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
340 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
341 /* 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
342 * 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
343 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
344 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
345 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
346 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
347 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
348
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
349 /* 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
350
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
351 /* 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
352 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
353 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
354 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
355 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
356 purple_debug_error("core", "Error creating directory %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
357 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
358 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
359 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
360 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
361 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
362 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
363
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
364 /* 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
365 * 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
366 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
367 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
368 purple_debug_error("core", "Error opening file %s for writing: %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
369 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
370 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
371 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
372 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
373 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
374 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
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 /* 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
377 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
378 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
379 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
380 purple_debug_error("core", "Error opening directory %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
381 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
382 (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
383 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
384 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
385 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
386 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
387 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
388 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
389
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
390 /* 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
391 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
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 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
394
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
395 #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
396 /* 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
397 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
398 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
399 /* 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
400 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
401 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
402 char buf[MAXPATHLEN];
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
403
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
404 if (readlink(name, buf, sizeof(buf) - 1) == -1)
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
405 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
406 purple_debug_error("core", "Error reading symlink %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
407 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
408 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
409 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
410 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
411 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
412 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
413 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
414 buf[sizeof(buf) - 1] = '\0';
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 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
417
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
418 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
419 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
420 /* 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
421 * 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
422 * 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
423 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
424 continue;
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
425 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
426
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
427 /* 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
428 * 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
429 * 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
430 * 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
431 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
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 /* 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
434 * 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
435 * 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
436 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
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 purple_debug_error("core", "Error symlinking %s to %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
439 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
440 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
441 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
442 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
443 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
444 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
445 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
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 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
449 continue;
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
450 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
451
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
452 /* 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
453 continue;
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
454 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
455 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
456
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
457 /* 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
458 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
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 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
461 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
462 /* 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
463 * 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
464 * 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
465 * 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
466 * 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
467
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
468 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
469 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
470 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
471
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
472 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
473 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
474 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
475 purple_debug_error("core", "Error opening directory %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
476 name,
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
477 (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
478 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
479 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
480 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
481 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
482 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
483 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
484 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
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
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
487 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
488 /* 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
489 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
490 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
491 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
492 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
493 purple_debug_error("core", "Error creating directory %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
494 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
495 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
496 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
497 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
498 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
499 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
500 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
501 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
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 }
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 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
506 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
507 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
508
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
509 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
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 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
512 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
513 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
514 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
515 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
516 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
517 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
518 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
519 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
520 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
521 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
522 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
523 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
524 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
525 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
526
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(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
528 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
529 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
530 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
531 /* 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
532 * 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
533 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
534 else
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 /* 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
537 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
538 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
539 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
540 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
541 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
542 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
543 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
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 }
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 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
548 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
549 /* 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
550
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
551 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
552 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
553
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
554 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
555 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
556 purple_debug_error("core", "Error opening file %s for reading: %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
557 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
558 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
559 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
560 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
561 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
562 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
563 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
564
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
565 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
566 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
567 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
568 purple_debug_error("core", "Error opening file %s for writing: %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
569 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
570 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
571 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
572 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
573 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
574 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
575 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
576 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
577 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
578
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
579 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
580 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
581 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
582 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
583
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
584 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
585 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
586 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
587 purple_debug_error("core", "Error reading %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
588 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
589 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
590 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
591 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
592 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
593 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
594 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
595 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
596 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
597 }
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 if (!fwrite(buf, size, 1, 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
600 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
601 purple_debug_error("core", "Error writing %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
602 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
603 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
604 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
605 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
606 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
607 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
608 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
609 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
610 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
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 }
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 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
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 purple_debug_error("core", "Error writing: %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
617 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
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 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
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 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
622 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
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(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
625 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
626 else
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
627 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
628
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
629 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
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 /* 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
633 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
634 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
635 purple_debug_error("core", "Error unlinking file %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
636 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
637 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
638 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
639 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
640
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
641 old_icons_dir = g_build_filename(old_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
642 purple_buddy_icon_set_old_icons_dir(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
643 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
644
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(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
646
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
647 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
648 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
649 }