annotate libpurple/core.c @ 20245:9a48e67fbfc8

applied changes from f7687aed5d4c60018282a0629b67556f506ceb54 through 0a36aea71847198e73c07cbef0be7e7a7db12c57
author Richard Laager <rlaager@wiktel.com>
date Fri, 28 Sep 2007 15:58:55 +0000
parents 44b4e8bd759b
children 6bf32c9e15a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
2 * @file core.c Purple Core API
15374
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 *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
5 * purple
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
7 * Purple is the legal property of its developers, whose names are too numerous
15374
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
19680
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19512
diff changeset
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15374
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"
18957
9205841eed06 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18224
diff changeset
27 #include "certificate.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "connection.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "conversation.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "core.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include "dnsquery.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33 #include "ft.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #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
35 #include "imgstore.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include "network.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37 #include "notify.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38 #include "plugin.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39 #include "pounce.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40 #include "prefs.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
41 #include "privacy.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42 #include "proxy.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
43 #include "savedstatuses.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44 #include "signals.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 #include "sound.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46 #include "sslconn.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47 #include "status.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
48 #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
49 #include "util.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
50
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
51 #ifdef HAVE_DBUS
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
52 # define DBUS_API_SUBJECT_TO_CHANGE
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
53 # include <dbus/dbus.h>
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
54 # include "dbus-purple.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55 # include "dbus-server.h"
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
56 # include "dbus-bindings.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
59 struct PurpleCore
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
60 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
61 char *ui;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
62
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
63 void *reserved;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
64 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
65
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
66 static PurpleCoreUiOps *_ops = NULL;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
67 static PurpleCore *_core = NULL;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
68
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
69 STATIC_PROTO_INIT
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
70
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
71 gboolean
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
72 purple_core_init(const char *ui)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
73 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
74 PurpleCoreUiOps *ops;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
75 PurpleCore *core;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 g_return_val_if_fail(ui != NULL, FALSE);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
78 g_return_val_if_fail(purple_get_core() == NULL, FALSE);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79
16063
fa8aeab4ca5a Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents: 15823
diff changeset
80 #ifdef ENABLE_NLS
fa8aeab4ca5a Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents: 15823
diff changeset
81 bindtextdomain(PACKAGE, LOCALEDIR);
fa8aeab4ca5a Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents: 15823
diff changeset
82 #endif
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83 #ifdef _WIN32
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
84 wpurple_init();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
86
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
87 _core = core = g_new0(PurpleCore, 1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
88 core->ui = g_strdup(ui);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
89 core->reserved = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
91 ops = purple_core_get_ui_ops();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
92
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
93 /* The signals subsystem is important and should be first. */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
94 purple_signals_init();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
96 purple_signal_register(core, "uri-handler",
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
97 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
98 purple_value_new(PURPLE_TYPE_BOOLEAN), 3,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
99 purple_value_new(PURPLE_TYPE_STRING), /* Protocol */
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
100 purple_value_new(PURPLE_TYPE_STRING), /* Command */
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
101 purple_value_new(PURPLE_TYPE_BOXED, "GHashTable *")); /* Parameters */
15613
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: 15374
diff changeset
102
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
103 purple_signal_register(core, "quitting", purple_marshal_VOID, NULL, 0);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
104
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105 /* 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
106 * for protocol prefs to work. */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
107 purple_prefs_init();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
109 purple_debug_init();
15374
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 != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113 if (ops->ui_prefs_init != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114 ops->ui_prefs_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116 if (ops->debug_ui_init != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 ops->debug_ui_init();
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
120 #ifdef HAVE_DBUS
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
121 purple_dbus_init();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
123
16599
976a9b4c336a Part of the patch in ticket #383:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 16548
diff changeset
124 purple_ciphers_init();
976a9b4c336a Part of the patch in ticket #383:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 16548
diff changeset
125
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126 /* Initialize all static protocols. */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 static_proto_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129 /* 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
130 * subsystem right away too.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
131 */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
132 purple_plugins_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
133 purple_plugins_probe(G_MODULE_SUFFIX);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134
16375
391a79778f89 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents: 16341
diff changeset
135 /* 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
136 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
137
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
138 /* Accounts use status and buddy icons, so initialize these before accounts */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
139 purple_status_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
140 purple_buddy_icons_init();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
142 purple_accounts_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
143 purple_savedstatuses_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
144 purple_notify_init();
18957
9205841eed06 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18224
diff changeset
145 purple_certificate_init();
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
146 purple_connections_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
147 purple_conversations_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
148 purple_blist_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
149 purple_log_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
150 purple_network_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
151 purple_privacy_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
152 purple_pounces_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
153 purple_proxy_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
154 purple_dnsquery_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
155 purple_sound_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
156 purple_ssl_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
157 purple_stun_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
158 purple_xfers_init();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
159 purple_idle_init();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
160
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
161 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
162 * 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
163 * hopefully save some time later.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
164 */
19512
c88e64f1ed76 Move purple_prefs_load() to purple_prefs_init() - there's been a TODO for this for a long time. I have no idea why this wasn't done sooner; it seems to work just fine and fixes some bugs where stuff isn't loaded before being used. Fixes #1848 (and I'm sure others). Yell at me if this breaks anything.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19200
diff changeset
165 purple_network_get_my_ip(-1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
167 if (ops != NULL && ops->ui_init != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168 ops->ui_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
170 return TRUE;
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
173 void
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
174 purple_core_quit(void)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
175 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
176 PurpleCoreUiOps *ops;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
177 PurpleCore *core = purple_get_core();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
178
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
179 g_return_if_fail(core != NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
180
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
181 /* The self destruct sequence has been initiated */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
182 purple_signal_emit(purple_get_core(), "quitting");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
183
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
184 /* Transmission ends */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
185 purple_connections_disconnect_all();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
186
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
187 /* Save .xml files, remove signals, etc. */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
188 purple_idle_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
189 purple_ssl_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
190 purple_pounces_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
191 purple_blist_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
192 purple_ciphers_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
193 purple_notify_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
194 purple_conversations_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
195 purple_connections_uninit();
18957
9205841eed06 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18224
diff changeset
196 purple_certificate_uninit();
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
197 purple_buddy_icons_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
198 purple_accounts_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
199 purple_savedstatuses_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
200 purple_status_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
201 purple_prefs_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
202 purple_xfers_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
203 purple_proxy_uninit();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
204 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
205 purple_imgstore_uninit();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
206
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
207 purple_debug_info("main", "Unloading all plugins\n");
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
208 purple_plugins_destroy_all();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
209
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
210 ops = purple_core_get_ui_ops();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
211 if (ops != NULL && ops->quit != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
212 ops->quit();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
213
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
214 /*
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
215 * purple_sound_uninit() should be called as close to
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
216 * 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
217 * to ao_shutdown() can sometimes leave our
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
218 * environment variables in an unusable state, which
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
219 * 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
220 * 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
221 * 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
222 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
223 * 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
224 */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
225 purple_sound_uninit();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
226
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
227 purple_plugins_uninit();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228 #ifdef HAVE_DBUS
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
229 purple_dbus_uninit();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
230 #endif
18224
73ea3328b0d1 Uninit the dbus system before uniniting the signals.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18204
diff changeset
231 purple_signals_uninit();
15374
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 g_free(core->ui);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234 g_free(core);
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 #ifdef _WIN32
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
237 wpurple_cleanup();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
239
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
240 _core = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
241 }
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 gboolean
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
244 purple_core_quit_cb(gpointer unused)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
245 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
246 purple_core_quit();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
248 return FALSE;
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
251 const char *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
252 purple_core_get_version(void)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
253 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
254 return VERSION;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
255 }
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 const char *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
258 purple_core_get_ui(void)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
260 PurpleCore *core = purple_get_core();
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
261
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262 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
263
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 return core->ui;
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
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
267 PurpleCore *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
268 purple_get_core(void)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
269 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
270 return _core;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
271 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
272
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
273 void
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
274 purple_core_set_ui_ops(PurpleCoreUiOps *ops)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
275 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
276 _ops = ops;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
277 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
278
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
279 PurpleCoreUiOps *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15613
diff changeset
280 purple_core_get_ui_ops(void)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
281 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
282 return _ops;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
283 }
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
284
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
285 #ifdef HAVE_DBUS
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
286 static char *purple_dbus_owner_user_dir(void)
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
287 {
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
288 DBusMessage *msg = NULL, *reply = NULL;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
289 DBusConnection *dbus_connection = NULL;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
290 DBusError dbus_error;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
291 char *remote_user_dir = NULL;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
292
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
293 if ((dbus_connection = purple_dbus_get_connection()) == NULL)
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
294 return NULL;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
295
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
296 if ((msg = dbus_message_new_method_call(DBUS_SERVICE_PURPLE, DBUS_PATH_PURPLE, DBUS_INTERFACE_PURPLE, "PurpleUserDir")) == NULL)
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
297 return NULL;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
298
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
299 dbus_error_init(&dbus_error);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
300 reply = dbus_connection_send_with_reply_and_block(dbus_connection, msg, 5000, &dbus_error);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
301 dbus_message_unref(msg);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
302 dbus_error_free(&dbus_error);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
303
17211
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
304 if (reply)
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
305 {
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
306 dbus_error_init(&dbus_error);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
307 dbus_message_get_args(reply, &dbus_error, DBUS_TYPE_STRING, &remote_user_dir, DBUS_TYPE_INVALID);
17128
9d5121f2ab5d Minor formatting tweaks for the dbus_uniq code.
Richard Laager <rlaager@wiktel.com>
parents: 17124
diff changeset
308 remote_user_dir = g_strdup(remote_user_dir);
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
309 dbus_error_free(&dbus_error);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
310 dbus_message_unref(reply);
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
311 }
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
312
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
313 return remote_user_dir;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
314 }
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
315
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
316 static void purple_dbus_owner_show_buddy_list(void)
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
317 {
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
318 DBusError dbus_error;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
319 DBusMessage *msg = NULL, *reply = NULL;
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
320 DBusConnection *dbus_connection = NULL;
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
321
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
322 if ((dbus_connection = purple_dbus_get_connection()) == NULL)
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
323 return;
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
324
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
325 if ((msg = dbus_message_new_method_call(DBUS_SERVICE_PURPLE, DBUS_PATH_PURPLE, DBUS_INTERFACE_PURPLE, "PurpleBlistShow")) == NULL)
17128
9d5121f2ab5d Minor formatting tweaks for the dbus_uniq code.
Richard Laager <rlaager@wiktel.com>
parents: 17124
diff changeset
326 return;
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
327
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
328 dbus_error_init(&dbus_error);
17211
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
329 if ((reply = dbus_connection_send_with_reply_and_block(dbus_connection, msg, 5000, &dbus_error)) != NULL)
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
330 {
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
331 dbus_message_unref(msg);
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
332 }
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
333 dbus_error_free(&dbus_error);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
334 }
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
335 #endif /* HAVE_DBUS */
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
336
17211
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
337 gboolean
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
338 purple_core_ensure_single_instance()
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
339 {
17211
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
340 gboolean is_single_instance = TRUE;
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
341 #ifdef HAVE_DBUS
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
342 /* in the future, other mechanisms might have already set this to FALSE */
17211
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
343 if (is_single_instance)
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
344 {
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
345 if (!purple_dbus_is_owner())
1d6007400837 Style changes.
Richard Laager <rlaager@wiktel.com>
parents: 17163
diff changeset
346 {
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
347 const char *user_dir = purple_user_dir();
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
348 char *dbus_owner_user_dir = purple_dbus_owner_user_dir();
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
349
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
350 if (NULL == user_dir && NULL != dbus_owner_user_dir)
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
351 is_single_instance = TRUE;
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
352 else if (NULL != user_dir && NULL == dbus_owner_user_dir)
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
353 is_single_instance = TRUE;
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
354 else if (NULL == user_dir && NULL == dbus_owner_user_dir)
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
355 is_single_instance = FALSE;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
356 else
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
357 is_single_instance = strcmp(dbus_owner_user_dir, user_dir);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
358
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
359 if (!is_single_instance)
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
360 purple_dbus_owner_show_buddy_list();
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
361
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
362 g_free(dbus_owner_user_dir);
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
363 }
17124
601594a64190 Style changes + removed unnecessary NULL checks.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17123
diff changeset
364 }
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
365 #endif /* HAVE_DBUS */
17128
9d5121f2ab5d Minor formatting tweaks for the dbus_uniq code.
Richard Laager <rlaager@wiktel.com>
parents: 17124
diff changeset
366
17123
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
367 return is_single_instance;
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
368 }
176d0fc8bc16 Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 16700
diff changeset
369
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
370 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
371 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
372 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
373 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
374 #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
375 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
376 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
377 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
378 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
379 purple_debug_error("core", "Error renaming %s to %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
380 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
381 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
382 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
383 }
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_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
385
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
386 #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
387 /* 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
388 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
389 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
390 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
391 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
392 purple_debug_warning("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
393 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
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 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
396 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
397 #endif
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 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
400 }
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 gboolean
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
403 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
404 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
405 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
406 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
407 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
408 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
409 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
410 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
411 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
412 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
413 #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
414 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
415 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
416 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
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 (!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
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 /* ~/.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
421 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
422 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
423 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
424
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
425 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
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 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
428 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
429 /* 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
430
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
431 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
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 /* 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
434 * 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
435 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
436 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
437 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
438 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
439 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
440
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
441 /* 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
442
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
443 /* 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
444 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
445 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
446 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
447 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
448 purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
449 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
450 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
451 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
452 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
453 }
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
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
456 /* 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
457 * 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
458 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
459 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
460 purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
461 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
462 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
463 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
464 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
465 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
466 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
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 /* 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
469 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
470 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
471 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
472 purple_debug_error("core", "Error opening directory %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
473 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
474 (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
475 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
476 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
477 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
478 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
479 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
480 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
481
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
482 /* 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
483 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
484 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
485 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
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 #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
488 /* 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
489 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
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 /* 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
492 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
493 {
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
494 char *link;
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
495 #if GLIB_CHECK_VERSION(2,4,0)
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
496 GError *err = NULL;
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
497
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
498 if ((link = g_file_read_link(name, &err)) == NULL)
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
499 {
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
500 char *name_utf8 = g_filename_to_utf8(name, -1, NULL, NULL, NULL);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
501 purple_debug_error("core", "Error reading symlink %s: %s. Please report this at http://developer.pidgin.im\n",
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
502 name_utf8 ? name_utf8 : name, err->message);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
503 g_free(name_utf8);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
504 g_error_free(err);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
505 g_free(name);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
506 g_dir_close(dir);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
507 g_free(status_file);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
508 g_free(old_user_dir);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
509 return FALSE;
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
510 }
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
511 #else
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
512 char buf[MAXPATHLEN];
16605
99e786de5bd5 #386: readlink does not append NUL to the end of buffer
Ka-Hing Cheung <khc@hxbc.us>
parents: 16599
diff changeset
513 size_t linklen;
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
514
16605
99e786de5bd5 #386: readlink does not append NUL to the end of buffer
Ka-Hing Cheung <khc@hxbc.us>
parents: 16599
diff changeset
515 if ((linklen = readlink(name, buf, sizeof(buf) - 1) == -1))
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
516 {
18204
4cc042912ac2 Bring back MAXPATHLEN (which was always guaranteed to be defined earlier
Stu Tomlinson <stu@nosnilmot.com>
parents: 18148
diff changeset
517 char *name_utf8 = g_filename_to_utf8(name, -1, NULL, NULL, NULL);
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
518 purple_debug_error("core", "Error reading symlink %s: %s. Please report this at http://developer.pidgin.im\n",
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
519 name_utf8, strerror(errno));
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
520 g_free(name_utf8);
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
521 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
522 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
523 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
524 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
525 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
526 }
16605
99e786de5bd5 #386: readlink does not append NUL to the end of buffer
Ka-Hing Cheung <khc@hxbc.us>
parents: 16599
diff changeset
527 buf[linklen] = '\0';
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
528
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
529 /* This way we don't have to GLIB_VERSION_CHECK every g_free(link) below. */
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
530 link = g_strdup(buf);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
531 #endif
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
532
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
533 logs_dir = g_build_filename(user_dir, "logs", NULL);
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
534
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
535 if (!strcmp(link, "../.purple/logs") || !strcmp(link, logs_dir))
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
536 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
537 /* 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
538 * 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
539 * so there's no need to fail here. */
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
540 g_free(link);
16341
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(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
542 continue;
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
543 }
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 /* 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
546 * 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
547 * 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
548 * 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
549 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
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 /* Relative links will most likely still be
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
552 * valid from ~/.purple, though it's not
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
553 * guaranteed. Oh well. */
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
554 if (symlink(link, logs_dir))
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
555 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
556 purple_debug_error("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n",
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
557 logs_dir, link, strerror(errno));
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
558 g_free(link);
16341
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_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
560 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
561 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
562 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
563 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
564 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
565 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
566
18148
f160b6e84d0c Use dynamicly allocated string manipulation here as well to avoid a
Richard Laager <rlaager@wiktel.com>
parents: 17211
diff changeset
567 g_free(link);
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
568 g_free(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
569 continue;
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
570 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
571
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
572 /* 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
573 continue;
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
574 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
575 #endif
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
576
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
577 /* 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
578 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
579 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
580 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
581 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
582 /* 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
583 * 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
584 * 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
585 * 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
586 * 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
587
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
588 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
589 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
590 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
591
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
592 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
593 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
594 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
595 purple_debug_error("core", "Error opening directory %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
596 name,
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
597 (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
598 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
599 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
600 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
601 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
602 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
603 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
604 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
605 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
606
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
607 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
608 /* 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
609 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
610 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
611 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
612 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
613 purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
614 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
615 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
616 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
617 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
618 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
619 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
620 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
621 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
622 }
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
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
625 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
626 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
627 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
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 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
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 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
632 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
633 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
634 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
635 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
636 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
637 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
638 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
639 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
640 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
641 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
642 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
643 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
644 g_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
645 }
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_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
648 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
649 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
650 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
651 /* 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
652 * 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
653 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
654 else
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
655 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
656 /* 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
657 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
658 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
659 g_free(name);
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
660 g_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
661 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
662 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
663 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
664 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
665 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
666 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
667 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
668 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
669 /* 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
670
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
671 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
672 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
673
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
674 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
675 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
676 purple_debug_error("core", "Error opening file %s for reading: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
677 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
678 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
679 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
680 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
681 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
682 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
683 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
684
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
685 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
686 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
687 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
688 purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
689 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
690 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
691 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
692 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
693 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
694 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
695 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
696 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
697 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
698
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
699 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
700 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
701 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
702 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
703
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
704 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
705 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
706 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
707 purple_debug_error("core", "Error reading %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
708 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
709 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
710 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
711 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
712 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
713 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
714 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
715 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
716 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
717 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
718
16490
dec693050305 Proper error checking on fwrite() call
Sean Egan <seanegan@gmail.com>
parents: 16484
diff changeset
719 if (!fwrite(buf, size, 1, new_file) && ferror(new_file) != 0)
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
720 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
721 purple_debug_error("core", "Error writing %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
722 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
723 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
724 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
725 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
726 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
727 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
728 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
729 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
730 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
731 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
732 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
733
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
734 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
735 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
736 purple_debug_error("core", "Error writing: %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
737 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
738 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
739 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
740 {
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
741 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
742 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
743 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
744 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
745 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
746 else
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
747 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
748
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
749 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
750 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
751
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
752 /* 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
753 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
754 {
16700
f8f78fa7e774 Solicit bug reports
Sean Egan <seanegan@gmail.com>
parents: 16639
diff changeset
755 purple_debug_error("core", "Error unlinking file %s: %s. Please report this at http://developer.pidgin.im\n",
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
756 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
757 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
758 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
759 }
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
760
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
761 old_icons_dir = g_build_filename(old_user_dir, "icons", NULL);
16639
f9c369b4291c Fix up the private function calls to be prefixed with an underscore.
Richard Laager <rlaager@wiktel.com>
parents: 16605
diff changeset
762 _purple_buddy_icon_set_old_icons_dir(old_icons_dir);
16341
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
763 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
764
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
765 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
766
786edf5e2144 The core portion of the migration code. This is implemented as I described
Richard Laager <rlaager@wiktel.com>
parents: 16063
diff changeset
767 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
768 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
769 }
18292
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
770
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
771 GHashTable* purple_core_get_ui_info() {
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
772 PurpleCoreUiOps *ops = purple_core_get_ui_ops();
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
773
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
774 if(NULL == ops || NULL == ops->get_ui_info)
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
775 return NULL;
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
776
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
777 return ops->get_ui_info();
9db52d9b8436 core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents: 18224
diff changeset
778 }