libpurple/plugin.c

Fri, 08 Aug 2008 01:13:50 +0000

author
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
date
Fri, 08 Aug 2008 01:13:50 +0000
branch
soc.2008.masterpassword
changeset 33982
58a0de711782
parent 23220
21df3f693ca1
child 34009
8e996cb3581a
permissions
-rw-r--r--

Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.

5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
2 * purple
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7956
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7956
diff changeset
6 * source distribution.
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 *
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18889
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 */
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
22 #include "internal.h"
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5573
diff changeset
24 #include "accountopt.h"
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
25 #include "core.h"
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
26 #include "dbus-maybe.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
27 #include "debug.h"
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5357
diff changeset
28 #include "notify.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
29 #include "prefs.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
30 #include "prpl.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5840
diff changeset
31 #include "request.h"
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6432
diff changeset
32 #include "signals.h"
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
33 #include "util.h"
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
34 #include "version.h"
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
36 typedef struct
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
37 {
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
38 GHashTable *commands;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
39 size_t command_count;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
40
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
41 } PurplePluginIpcInfo;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
42
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
43 typedef struct
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
44 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
45 PurpleCallback func;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
46 PurpleSignalMarshalFunc marshal;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
47
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
48 int num_params;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
49 PurpleValue **params;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
50 PurpleValue *ret_value;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
51
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
52 } PurplePluginIpcCommand;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
53
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
54 static GList *search_paths = NULL;
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
55 static GList *plugins = NULL;
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
56 static GList *loaded_plugins = NULL;
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
57 static GList *protocol_plugins = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
58 #ifdef PURPLE_PLUGINS
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
59 static GList *load_queue = NULL;
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
60 static GList *plugin_loaders = NULL;
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
61 static GList *plugins_to_disable = NULL;
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
62 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 static void (*probe_cb)(void *) = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 static void *probe_cb_data = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
66 static void (*load_cb)(PurplePlugin *, void *) = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 static void *load_cb_data = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
68 static void (*unload_cb)(PurplePlugin *, void *) = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69 static void *unload_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
71 #ifdef PURPLE_PLUGINS
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
72
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
73 static gboolean
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
74 has_file_extension(const char *filename, const char *ext)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76 int len, extlen;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
77
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78 if (filename == NULL || *filename == '\0' || ext == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
79 return 0;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
80
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81 extlen = strlen(ext);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82 len = strlen(filename) - extlen;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84 if (len < 0)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 return 0;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
87 return (strncmp(filename + len, ext, extlen) == 0);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90 static gboolean
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
91 is_native(const char *filename)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
92 {
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
93 const char *last_period;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
94
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
95 last_period = strrchr(filename, '.');
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
96 if (last_period == NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
97 return FALSE;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
98
12077
484da2b29933 [gaim-migrate @ 14374]
Mark Doliner <markdoliner@pidgin.im>
parents: 12066
diff changeset
99 return !(strcmp(last_period, ".dll") &
484da2b29933 [gaim-migrate @ 14374]
Mark Doliner <markdoliner@pidgin.im>
parents: 12066
diff changeset
100 strcmp(last_period, ".sl") &
484da2b29933 [gaim-migrate @ 14374]
Mark Doliner <markdoliner@pidgin.im>
parents: 12066
diff changeset
101 strcmp(last_period, ".so"));
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
102 }
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
103
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
104 static char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
105 purple_plugin_get_basename(const char *filename)
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
106 {
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
107 const char *basename;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
108 const char *last_period;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
109
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
110 basename = strrchr(filename, G_DIR_SEPARATOR);
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
111 if (basename != NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
112 basename++;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
113 else
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
114 basename = filename;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
115
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
116 if (is_native(basename) &&
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
117 ((last_period = strrchr(basename, '.')) != NULL))
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
118 return g_strndup(basename, (last_period - basename));
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
119
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
120 return g_strdup(basename);
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
121 }
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
122
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
123 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
124 loader_supports_file(PurplePlugin *loader, const char *filename)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
125 {
6432
deb64099bbf3 [gaim-migrate @ 6940]
Ethan Blanton <elb@pidgin.im>
parents: 5981
diff changeset
126 GList *exts;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
127
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
128 for (exts = PURPLE_PLUGIN_LOADER_INFO(loader)->exts; exts != NULL; exts = exts->next) {
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
129 if (has_file_extension(filename, (char *)exts->data)) {
6432
deb64099bbf3 [gaim-migrate @ 6940]
Ethan Blanton <elb@pidgin.im>
parents: 5981
diff changeset
130 return TRUE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
131 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
132 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
133
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
134 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
135 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
136
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
137 static PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
138 find_loader_for_plugin(const PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
139 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
140 PurplePlugin *loader;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
141 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
142
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
143 if (plugin->path == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
144 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
145
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
146 for (l = purple_plugins_get_loaded(); l != NULL; l = l->next) {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
147 loader = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
148
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
149 if (loader->info->type == PURPLE_PLUGIN_LOADER &&
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
150 loader_supports_file(loader, plugin->path)) {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
151
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
152 return loader;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
153 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
154
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
155 loader = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
156 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
157
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
158 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
159 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
160
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
161 #endif /* PURPLE_PLUGINS */
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
162
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
163 /**
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
164 * Negative if a before b, 0 if equal, positive if a after b.
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
165 */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
166 static gint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
167 compare_prpl(PurplePlugin *a, PurplePlugin *b)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
168 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
169 if(PURPLE_IS_PROTOCOL_PLUGIN(a)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
170 if(PURPLE_IS_PROTOCOL_PLUGIN(b))
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
171 return strcmp(a->info->name, b->info->name);
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
172 else
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
173 return -1;
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
174 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
175 if(PURPLE_IS_PROTOCOL_PLUGIN(b))
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
176 return 1;
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
177 else
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
178 return 0;
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7279
diff changeset
179 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
180 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
181
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
182 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
183 purple_plugin_new(gboolean native, const char *path)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
184 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
185 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
186
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
187 plugin = g_new0(PurplePlugin, 1);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
188
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189 plugin->native_plugin = native;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
190 plugin->path = g_strdup(path);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
191
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
192 PURPLE_DBUS_REGISTER_POINTER(plugin, PurplePlugin);
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
193
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
194 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
195 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
196
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
197 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
198 purple_plugin_probe(const char *filename)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
200 #ifdef PURPLE_PLUGINS
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
201 PurplePlugin *plugin = NULL;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
202 PurplePlugin *loader;
10124
68426d8af5d0 [gaim-migrate @ 11161]
Nathan Walp <nwalp@pidgin.im>
parents: 10087
diff changeset
203 gpointer unpunned;
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
204 gchar *basename = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
205 gboolean (*purple_init_plugin)(PurplePlugin *);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
207 purple_debug_misc("plugins", "probing %s\n", filename);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 g_return_val_if_fail(filename != NULL, NULL);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209
5973
adc75f0fcaa3 [gaim-migrate @ 6420]
Mark Doliner <markdoliner@pidgin.im>
parents: 5949
diff changeset
210 if (!g_file_test(filename, G_FILE_TEST_EXISTS))
adc75f0fcaa3 [gaim-migrate @ 6420]
Mark Doliner <markdoliner@pidgin.im>
parents: 5949
diff changeset
211 return NULL;
adc75f0fcaa3 [gaim-migrate @ 6420]
Mark Doliner <markdoliner@pidgin.im>
parents: 5949
diff changeset
212
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
213 /* If this plugin has already been probed then exit */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
214 basename = purple_plugin_get_basename(filename);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
215 plugin = purple_plugins_find_with_basename(basename);
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
216 g_free(basename);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217 if (plugin != NULL)
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
218 {
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
219 if (!strcmp(filename, plugin->path))
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
220 return plugin;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
221 else if (!purple_plugin_is_unloadable(plugin))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
222 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
223 purple_debug_info("plugins", "Not loading %s. "
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
224 "Another plugin with the same name (%s) has already been loaded.\n",
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
225 filename, plugin->path);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
226 return plugin;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
227 }
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
228 else
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
229 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
230 /* The old plugin was a different file and it was unloadable.
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
231 * There's no guarantee that this new file with the same name
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
232 * will be loadable, but unless it fails in one of the silent
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
233 * ways and the first one didn't, it's not any worse. The user
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
234 * will still see a greyed-out plugin, which is what we want. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
235 purple_plugin_destroy(plugin);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
236 }
12342
da61b726d595 [gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12332
diff changeset
237 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
238
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
239 plugin = purple_plugin_new(has_file_extension(filename, G_MODULE_SUFFIX), filename);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
240
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
241 if (plugin->native_plugin) {
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
242 const char *error;
12623
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
243 #ifdef _WIN32
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
244 /* Suppress error popups for failing to load plugins */
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
245 UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
4f1fe7e1f808 [gaim-migrate @ 14959]
Daniel Atallah <datallah@pidgin.im>
parents: 12342
diff changeset
246 #endif
12696
6c964da4a652 [gaim-migrate @ 15039]
Nathan Walp <nwalp@pidgin.im>
parents: 12695
diff changeset
247
10737
c7759d698996 [gaim-migrate @ 12339]
Mark Doliner <markdoliner@pidgin.im>
parents: 10682
diff changeset
248 /*
10950
72a6cc0fc7a8 [gaim-migrate @ 12750]
Richard Laager <rlaager@pidgin.im>
parents: 10884
diff changeset
249 * We pass G_MODULE_BIND_LOCAL here to prevent symbols from
72a6cc0fc7a8 [gaim-migrate @ 12750]
Richard Laager <rlaager@pidgin.im>
parents: 10884
diff changeset
250 * plugins being added to the global name space.
11378
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
251 *
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
252 * G_MODULE_BIND_LOCAL was added in glib 2.3.3.
10737
c7759d698996 [gaim-migrate @ 12339]
Mark Doliner <markdoliner@pidgin.im>
parents: 10682
diff changeset
253 */
11378
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
254 #if GLIB_CHECK_VERSION(2,3,3)
10884
672f44600655 [gaim-migrate @ 12582]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10737
diff changeset
255 plugin->handle = g_module_open(filename, G_MODULE_BIND_LOCAL);
11378
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
256 #else
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
257 plugin->handle = g_module_open(filename, 0);
5857f76fb6b2 [gaim-migrate @ 13604]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
258 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
259
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
260 if (plugin->handle == NULL)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
261 {
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
262 const char *error = g_module_error();
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
263 if (error != NULL && purple_str_has_prefix(error, filename))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
264 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
265 error = error + strlen(filename);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
266
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
267 /* These are just so we don't crash. If we
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
268 * got this far, they should always be true. */
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
269 if (*error == ':')
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
270 error++;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
271 if (*error == ' ')
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
272 error++;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
273 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
274
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
275 if (error == NULL || !*error)
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
276 {
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
277 plugin->error = g_strdup(_("Unknown error"));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
278 purple_debug_error("plugins", "%s is not loadable: Unknown error\n",
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
279 plugin->path);
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
280 }
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
281 else
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
282 {
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
283 plugin->error = g_strdup(error);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
284 purple_debug_error("plugins", "%s is not loadable: %s\n",
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
285 plugin->path, plugin->error);
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
286 }
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
287 #if GLIB_CHECK_VERSION(2,3,3)
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
288 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
289 #else
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
290 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
291 #endif
5269
a318feccd844 [gaim-migrate @ 5641]
Christian Hammond <chipx86@chipx86.com>
parents: 5268
diff changeset
292
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
293 if (plugin->handle == NULL)
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
294 {
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
295 #ifdef _WIN32
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
296 /* Restore the original error mode */
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
297 SetErrorMode(old_error_mode);
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
298 #endif
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
299 purple_plugin_destroy(plugin);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
300 return NULL;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
301 }
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
302 else
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
303 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
304 /* We were able to load the plugin with lazy symbol binding.
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
305 * This means we're missing some symbol. Mark it as
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
306 * unloadable and keep going so we get the info to display
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
307 * to the user so they know to rebuild this plugin. */
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
308 plugin->unloadable = TRUE;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
309 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
310 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
311
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
312 if (!g_module_symbol(plugin->handle, "purple_init_plugin",
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
313 &unpunned))
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
314 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
315 purple_debug_error("plugins", "%s is not usable because the "
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
316 "'purple_init_plugin' symbol could not be "
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
317 "found. Does the plugin call the "
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
318 "PURPLE_INIT_PLUGIN() macro?\n", plugin->path);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
319
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
320 g_module_close(plugin->handle);
5443
2bc0d2616c53 [gaim-migrate @ 5825]
Nathan Walp <nwalp@pidgin.im>
parents: 5436
diff changeset
321 error = g_module_error();
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
322 if (error != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
323 purple_debug_error("plugins", "Error closing module %s: %s\n",
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
324 plugin->path, error);
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
325 plugin->handle = NULL;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
326
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
327 #ifdef _WIN32
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
328 /* Restore the original error mode */
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
329 SetErrorMode(old_error_mode);
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
330 #endif
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
331 purple_plugin_destroy(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
332 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
333 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
334 purple_init_plugin = unpunned;
12699
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
335
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
336 #ifdef _WIN32
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
337 /* Restore the original error mode */
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
338 SetErrorMode(old_error_mode);
81611fa7a208 [gaim-migrate @ 15042]
Richard Laager <rlaager@pidgin.im>
parents: 12696
diff changeset
339 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
340 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
341 else {
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
342 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
343
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
344 if (loader == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
345 purple_plugin_destroy(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
346 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
347 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
348
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
349 purple_init_plugin = PURPLE_PLUGIN_LOADER_INFO(loader)->probe;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
350 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
351
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
352 if (!purple_init_plugin(plugin) || plugin->info == NULL)
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
353 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
354 purple_plugin_destroy(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
355 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
356 }
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
357 else if (plugin->info->ui_requirement &&
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
358 strcmp(plugin->info->ui_requirement, purple_core_get_ui()))
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
359 {
14918
db9f9d302973 [gaim-migrate @ 17625]
Mark Doliner <markdoliner@pidgin.im>
parents: 14895
diff changeset
360 plugin->error = g_strdup_printf(_("You are using %s, but this plugin requires %s."),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
361 purple_core_get_ui(), plugin->info->ui_requirement);
23220
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
362 purple_debug_error("plugins", "%s is not loadable: The UI requirement is not met. (%s)\n", plugin->path, plugin->error);
14787
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
363 plugin->unloadable = TRUE;
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
364 return plugin;
2adb9bac76b5 [gaim-migrate @ 17479]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14254
diff changeset
365 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
366
15962
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
367 /*
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
368 * Check to make sure a plugin has defined an id.
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
369 * Not having this check caused purple_plugin_unload to
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
370 * enter an infinite loop in certain situations by passing
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
371 * purple_find_plugin_by_id a NULL value. -- ecoffey
572de405bf5b Get rid of an unnecessary strdup
Mark Doliner <markdoliner@pidgin.im>
parents: 15938
diff changeset
372 */
15951
079275c87868 A small fix to the patch from ecoffey: Gary pointed out that the strcmp()
Richard Laager <rlaager@pidgin.im>
parents: 15938
diff changeset
373 if (plugin->info->id == NULL || *plugin->info->id == '\0')
15938
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
374 {
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
375 plugin->error = g_strdup_printf(_("This plugin has not defined an ID."));
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
376 purple_debug_error("plugins", "%s is not loadable: info->id is not defined.\n", plugin->path);
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
377 plugin->unloadable = TRUE;
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
378 return plugin;
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
379 }
1b037158411e SF Patch #1686400 from Eoin Coffey ("ecoffey")
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
380
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
381 /* Really old plugins. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
382 if (plugin->info->magic != PURPLE_PLUGIN_MAGIC)
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
383 {
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
384 if (plugin->info->magic >= 2 && plugin->info->magic <= 4)
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
385 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
386 struct _PurplePluginInfo2
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
387 {
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
388 unsigned int api_version;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
389 PurplePluginType type;
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
390 char *ui_requirement;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
391 unsigned long flags;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
392 GList *dependencies;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
393 PurplePluginPriority priority;
14895
38793d566e1c [gaim-migrate @ 17600]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14894
diff changeset
394
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
395 char *id;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
396 char *name;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
397 char *version;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
398 char *summary;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
399 char *description;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
400 char *author;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
401 char *homepage;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
402
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
403 gboolean (*load)(PurplePlugin *plugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
404 gboolean (*unload)(PurplePlugin *plugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
405 void (*destroy)(PurplePlugin *plugin);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
406
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
407 void *ui_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
408 void *extra_info;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
409 PurplePluginUiInfo *prefs_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
410 GList *(*actions)(PurplePlugin *plugin, gpointer context);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
411 } *info2 = (struct _PurplePluginInfo2 *)plugin->info;
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
412
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
413 /* This leaks... but only for ancient plugins, so deal with it. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
414 plugin->info = g_new0(PurplePluginInfo, 1);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
415
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
416 /* We don't really need all these to display the plugin info, but
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
417 * I'm copying them all for good measure. */
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
418 plugin->info->magic = info2->api_version;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
419 plugin->info->type = info2->type;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
420 plugin->info->ui_requirement = info2->ui_requirement;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
421 plugin->info->flags = info2->flags;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
422 plugin->info->dependencies = info2->dependencies;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
423 plugin->info->id = info2->id;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
424 plugin->info->name = info2->name;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
425 plugin->info->version = info2->version;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
426 plugin->info->summary = info2->summary;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
427 plugin->info->description = info2->description;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
428 plugin->info->author = info2->author;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
429 plugin->info->homepage = info2->homepage;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
430 plugin->info->load = info2->load;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
431 plugin->info->unload = info2->unload;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
432 plugin->info->destroy = info2->destroy;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
433 plugin->info->ui_info = info2->ui_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
434 plugin->info->extra_info = info2->extra_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
435
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
436 if (info2->api_version >= 3)
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
437 plugin->info->prefs_info = info2->prefs_info;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
438
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
439 if (info2->api_version >= 4)
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
440 plugin->info->actions = info2->actions;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
441
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
442
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
443 plugin->error = g_strdup_printf(_("Plugin magic mismatch %d (need %d)"),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
444 plugin->info->magic, PURPLE_PLUGIN_MAGIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
445 purple_debug_error("plugins", "%s is not loadable: Plugin magic mismatch %d (need %d)\n",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
446 plugin->path, plugin->info->magic, PURPLE_PLUGIN_MAGIC);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
447 plugin->unloadable = TRUE;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
448 return plugin;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
449 }
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
450
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
451 purple_debug_error("plugins", "%s is not loadable: Plugin magic mismatch %d (need %d)\n",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
452 plugin->path, plugin->info->magic, PURPLE_PLUGIN_MAGIC);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
453 purple_plugin_destroy(plugin);
12703
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
454 return NULL;
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
455 }
77b2e8d93ab8 [gaim-migrate @ 15046]
Richard Laager <rlaager@pidgin.im>
parents: 12699
diff changeset
456
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
457 if (plugin->info->major_version != PURPLE_MAJOR_VERSION ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
458 plugin->info->minor_version > PURPLE_MINOR_VERSION)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
459 {
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
460 plugin->error = g_strdup_printf(_("ABI version mismatch %d.%d.x (need %d.%d.x)"),
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
461 plugin->info->major_version, plugin->info->minor_version,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
462 PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
463 purple_debug_error("plugins", "%s is not loadable: ABI version mismatch %d.%d.x (need %d.%d.x)\n",
12704
f4cbb5550f67 [gaim-migrate @ 15047]
Richard Laager <rlaager@pidgin.im>
parents: 12703
diff changeset
464 plugin->path, plugin->info->major_version, plugin->info->minor_version,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
465 PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION);
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
466 plugin->unloadable = TRUE;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
467 return plugin;
10156
463aca04c29a [gaim-migrate @ 11236]
Mark Doliner <markdoliner@pidgin.im>
parents: 10145
diff changeset
468 }
463aca04c29a [gaim-migrate @ 11236]
Mark Doliner <markdoliner@pidgin.im>
parents: 10145
diff changeset
469
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
470 if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
10156
463aca04c29a [gaim-migrate @ 11236]
Mark Doliner <markdoliner@pidgin.im>
parents: 10145
diff changeset
471 {
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
472 /* If plugin is a PRPL, make sure it implements the required functions */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
473 if ((PURPLE_PLUGIN_PROTOCOL_INFO(plugin)->list_icon == NULL) ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
474 (PURPLE_PLUGIN_PROTOCOL_INFO(plugin)->login == NULL) ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
475 (PURPLE_PLUGIN_PROTOCOL_INFO(plugin)->close == NULL))
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
476 {
23220
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
477 plugin->error = g_strdup(_("Plugin does not implement all required functions (list_icon, login and close)"));
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
478 purple_debug_error("plugins", "%s is not loadable: %s\n",
21df3f693ca1 Use a little more helpful debug message when a plugin can't be loaded.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22875
diff changeset
479 plugin->path, plugin->error);
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
480 plugin->unloadable = TRUE;
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
481 return plugin;
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
482 }
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
483
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
484 /* For debugging, let's warn about prpl prefs. */
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
485 if (plugin->info->prefs_info != NULL)
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
486 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
487 purple_debug_error("plugins", "%s has a prefs_info, but is a prpl. This is no longer supported.\n",
13311
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
488 plugin->path);
0d7ab73ca418 [gaim-migrate @ 15676]
Richard Laager <rlaager@pidgin.im>
parents: 13251
diff changeset
489 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
490 }
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
491
33982
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
492 if (plugin->info->flags & PURPLE_PLUGIN_FLAG_AUTOLOAD) {
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
493 purple_debug_info("plugins", "Loading autoload plugin %s\n",
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
494 plugin->path);
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
495 purple_plugin_load(plugin); //
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
496 }
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
497
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
498 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
499 #else
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
500 return NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
501 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
502 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
503
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
504 #ifdef PURPLE_PLUGINS
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
505 static gint
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
506 compare_plugins(gconstpointer a, gconstpointer b)
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
507 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
508 const PurplePlugin *plugina = a;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
509 const PurplePlugin *pluginb = b;
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
510
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
511 return strcmp(plugina->info->name, pluginb->info->name);
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
512 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
513 #endif /* PURPLE_PLUGINS */
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
514
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
515 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
516 purple_plugin_load(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
517 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
518 #ifdef PURPLE_PLUGINS
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
519 GList *dep_list = NULL;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
520 GList *l;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
521
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
522 g_return_val_if_fail(plugin != NULL, FALSE);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
523
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
524 if (purple_plugin_is_loaded(plugin))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
525 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
526
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
527 if (purple_plugin_is_unloadable(plugin))
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
528 return FALSE;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
529
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
530 g_return_val_if_fail(plugin->error == NULL, FALSE);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
531
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
532 /*
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
533 * Go through the list of the plugin's dependencies.
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
534 *
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
535 * First pass: Make sure all the plugins needed are probed.
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
536 */
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
537 for (l = plugin->info->dependencies; l != NULL; l = l->next)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
538 {
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
539 const char *dep_name = (const char *)l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
540 PurplePlugin *dep_plugin;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
541
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
542 dep_plugin = purple_plugins_find_with_id(dep_name);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
543
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
544 if (dep_plugin == NULL)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
545 {
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
546 char *tmp;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
547
12983
a3fc5908dbf9 [gaim-migrate @ 15336]
Etan Reisner <deryni@pidgin.im>
parents: 12926
diff changeset
548 tmp = g_strdup_printf(_("The required plugin %s was not found. "
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
549 "Please install this plugin and try again."),
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
550 dep_name);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
551
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
552 purple_notify_error(NULL, NULL,
15444
b793ef258d23 I think this changes every user-visible string that contains 'Gaim.' We probably want the UI to be able
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
553 _("Unable to load the plugin"), tmp);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
554 g_free(tmp);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
555
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
556 g_list_free(dep_list);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
557
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
558 return FALSE;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
559 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
560
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
561 dep_list = g_list_append(dep_list, dep_plugin);
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
562 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
563
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
564 /* Second pass: load all the required plugins. */
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
565 for (l = dep_list; l != NULL; l = l->next)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
566 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
567 PurplePlugin *dep_plugin = (PurplePlugin *)l->data;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
568
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
569 if (!purple_plugin_is_loaded(dep_plugin))
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
570 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
571 if (!purple_plugin_load(dep_plugin))
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
572 {
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
573 char *tmp;
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
574
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
575 tmp = g_strdup_printf(_("The required plugin %s was unable to load."),
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
576 plugin->info->name);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
577
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
578 purple_notify_error(NULL, NULL,
15444
b793ef258d23 I think this changes every user-visible string that contains 'Gaim.' We probably want the UI to be able
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
579 _("Unable to load your plugin."), tmp);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
580 g_free(tmp);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
581
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
582 g_list_free(dep_list);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
583
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
584 return FALSE;
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
585 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
586 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
587 }
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
588
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
589 /* Third pass: note that other plugins are dependencies of this plugin.
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
590 * This is done separately in case we had to bail out earlier. */
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
591 for (l = dep_list; l != NULL; l = l->next)
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
592 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
593 PurplePlugin *dep_plugin = (PurplePlugin *)l->data;
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
594 dep_plugin->dependent_plugins = g_list_prepend(dep_plugin->dependent_plugins, plugin->info->id);
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
595 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
596
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
597 g_list_free(dep_list);
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
598
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
599 if (plugin->native_plugin)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
600 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
601 if (plugin->info != NULL && plugin->info->load != NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
602 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
603 if (!plugin->info->load(plugin))
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
604 return FALSE;
5357
1fa9e57df50c [gaim-migrate @ 5733]
Christian Hammond <chipx86@chipx86.com>
parents: 5270
diff changeset
605 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
606 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
607 else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
608 PurplePlugin *loader;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
609 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
610
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
611 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
612
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
613 if (loader == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
614 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
615
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
616 loader_info = PURPLE_PLUGIN_LOADER_INFO(loader);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
617
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
618 if (loader_info->load != NULL)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
619 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
620 if (!loader_info->load(plugin))
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
621 return FALSE;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
622 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
623 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
624
12332
9841e312051d [gaim-migrate @ 14636]
Mark Doliner <markdoliner@pidgin.im>
parents: 12117
diff changeset
625 loaded_plugins = g_list_insert_sorted(loaded_plugins, plugin, compare_plugins);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
626
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
627 plugin->loaded = TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
628
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
629 if (load_cb != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
630 load_cb(plugin, load_cb_data);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
631
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
632 purple_signal_emit(purple_plugins_get_handle(), "plugin-load", plugin);
8986
30ba617356bb [gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents: 8759
diff changeset
633
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
634 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
635
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
636 #else
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
637 return TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
638 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
639 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
640
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
641 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
642 purple_plugin_unload(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
643 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
644 #ifdef PURPLE_PLUGINS
12992
4bb06c9c1fb3 [gaim-migrate @ 15345]
Richard Laager <rlaager@pidgin.im>
parents: 12985
diff changeset
645 GList *l;
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
646 GList *ll;
12985
65f337c1a17e [gaim-migrate @ 15338]
Etan Reisner <deryni@pidgin.im>
parents: 12983
diff changeset
647
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
648 g_return_val_if_fail(plugin != NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
649 g_return_val_if_fail(purple_plugin_is_loaded(plugin), FALSE);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
650
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
651 purple_debug_info("plugins", "Unloading plugin %s\n", plugin->info->name);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
652
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
653 /* Unload all plugins that depend on this plugin. */
20863
1fb9e7564f5d Fix a syntax error so this compiles.
Richard Laager <rlaager@pidgin.im>
parents: 20806
diff changeset
654 for (l = plugin->dependent_plugins; l != NULL; l = ll) {
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
655 const char * dep_name = (const char *)l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
656 PurplePlugin *dep_plugin;
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
657
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
658 /* Store a pointer to the next element in the list.
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
659 * This is because we'll be modifying this list in the loop. */
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
660 ll = l->next;
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
661
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
662 dep_plugin = purple_plugins_find_with_id(dep_name);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
663
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
664 if (dep_plugin != NULL && purple_plugin_is_loaded(dep_plugin))
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
665 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
666 if (!purple_plugin_unload(dep_plugin))
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
667 {
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
668 g_free(plugin->error);
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
669 plugin->error = g_strdup_printf(_("%s requires %s, but it failed to unload."),
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
670 _(plugin->info->name),
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
671 _(dep_plugin->info->name));
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
672 return FALSE;
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
673 }
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
674 else
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
675 {
22090
71cbb3d611d3 Fix a double-free when unloading dependent plugins. Fixes #4488.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21682
diff changeset
676 #if 0
71cbb3d611d3 Fix a double-free when unloading dependent plugins. Fixes #4488.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21682
diff changeset
677 /* This isn't necessary. This has already been done when unloading dep_plugin. */
20865
e35ee4fd6d45 Use g_list_delete_link() instead of g_list_remove() in this new code, as
Richard Laager <rlaager@pidgin.im>
parents: 20864
diff changeset
678 plugin->dependent_plugins = g_list_delete_link(plugin->dependent_plugins, l);
22090
71cbb3d611d3 Fix a double-free when unloading dependent plugins. Fixes #4488.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21682
diff changeset
679 #endif
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
680 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
681 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
682 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
683
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
684 /* Remove this plugin from each dependency's dependent_plugins list. */
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
685 for (l = plugin->info->dependencies; l != NULL; l = l->next)
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
686 {
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
687 const char *dep_name = (const char *)l->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
688 PurplePlugin *dependency;
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
689
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
690 dependency = purple_plugins_find_with_id(dep_name);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
691
18889
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
692 if (dependency != NULL)
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
693 dependency->dependent_plugins = g_list_remove(dependency->dependent_plugins, plugin->info->id);
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
694 else
2eda48021b49 Fix core plugin dependency registering for gtkbuddynote to happen in plugin_init() so that it can work correctly. Add an additional sanity check in the core plugin unloading so that messed up dependency registrations don't cause crashes in the future. Thanks to deryni for helping figure this out.
Daniel Atallah <datallah@pidgin.im>
parents: 16006
diff changeset
695 purple_debug_error("plugins", "Unable to remove from dependency list for %s\n", dep_name);
12926
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
696 }
f04efa8d568c [gaim-migrate @ 15279]
Nick Hebner <hebnern@gmail.com>
parents: 12704
diff changeset
697
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
698 if (plugin->native_plugin) {
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
699 if (plugin->info->unload && !plugin->info->unload(plugin))
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
700 return FALSE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
701
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
702 if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
703 PurplePluginProtocolInfo *prpl_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
704 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
705
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
706 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
707
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5573
diff changeset
708 for (l = prpl_info->user_splits; l != NULL; l = l->next)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
709 purple_account_user_split_destroy(l->data);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
710
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5573
diff changeset
711 for (l = prpl_info->protocol_options; l != NULL; l = l->next)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
712 purple_account_option_destroy(l->data);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
713
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
714 if (prpl_info->user_splits != NULL) {
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5638
diff changeset
715 g_list_free(prpl_info->user_splits);
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
716 prpl_info->user_splits = NULL;
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
717 }
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5638
diff changeset
718
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
719 if (prpl_info->protocol_options != NULL) {
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5638
diff changeset
720 g_list_free(prpl_info->protocol_options);
12117
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
721 prpl_info->protocol_options = NULL;
b3781ac3f1da [gaim-migrate @ 14417]
Nathan Walp <nwalp@pidgin.im>
parents: 12081
diff changeset
722 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
723 }
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
724 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
725 PurplePlugin *loader;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
726 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
727
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
728 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
729
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
730 if (loader == NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
731 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
732
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
733 loader_info = PURPLE_PLUGIN_LOADER_INFO(loader);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
734
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
735 if (loader_info->unload && !loader_info->unload(plugin))
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
736 return FALSE;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
737 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
738
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
739 /* cancel any pending dialogs the plugin has */
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
740 purple_request_close_with_handle(plugin);
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
741 purple_notify_close_with_handle(plugin);
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
742
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
743 purple_signals_disconnect_by_handle(plugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
744 purple_plugin_ipc_unregister_all(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
745
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
746 loaded_plugins = g_list_remove(loaded_plugins, plugin);
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
747 if ((plugin->info != NULL) && PURPLE_IS_PROTOCOL_PLUGIN(plugin))
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
748 protocol_plugins = g_list_remove(protocol_plugins, plugin);
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
749 plugins_to_disable = g_list_remove(plugins_to_disable, plugin);
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
750 plugin->loaded = FALSE;
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
751
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
752 /* We wouldn't be anywhere near here if the plugin wasn't loaded, so
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
753 * if plugin->error is set at all, it had to be from a previous
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
754 * unload failure. It's obviously okay now.
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
755 */
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
756 g_free(plugin->error);
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
757 plugin->error = NULL;
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
758
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
759 if (unload_cb != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
760 unload_cb(plugin, unload_cb_data);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
761
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
762 purple_signal_emit(purple_plugins_get_handle(), "plugin-unload", plugin);
8986
30ba617356bb [gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents: 8759
diff changeset
763
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
764 purple_prefs_disconnect_by_handle(plugin);
10087
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9943
diff changeset
765
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
766 return TRUE;
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
767 #else
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
768 return TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
769 #endif /* PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
770 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
771
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
772 void
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
773 purple_plugin_disable(PurplePlugin *plugin)
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
774 {
21599
aab11d2102a3 Compile when plugins are disabled
Mark Doliner <markdoliner@pidgin.im>
parents: 20870
diff changeset
775 #ifdef PURPLE_PLUGINS
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
776 g_return_if_fail(plugin != NULL);
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
777
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
778 if (!g_list_find(plugins_to_disable, plugin))
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
779 plugins_to_disable = g_list_prepend(plugins_to_disable, plugin);
21599
aab11d2102a3 Compile when plugins are disabled
Mark Doliner <markdoliner@pidgin.im>
parents: 20870
diff changeset
780 #endif
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
781 }
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
782
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
783 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
784 purple_plugin_reload(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
785 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
786 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
787 g_return_val_if_fail(plugin != NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
788 g_return_val_if_fail(purple_plugin_is_loaded(plugin), FALSE);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
789
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
790 if (!purple_plugin_unload(plugin))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
791 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
792
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
793 if (!purple_plugin_load(plugin))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
794 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
795
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
796 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
797 #else
5449
4c350eb7d4a0 [gaim-migrate @ 5836]
Decklin Foster <decklin@red-bean.com>
parents: 5443
diff changeset
798 return TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
799 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
800 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
801
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
802 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
803 purple_plugin_destroy(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
804 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
805 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
806 g_return_if_fail(plugin != NULL);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
807
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
808 if (purple_plugin_is_loaded(plugin))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
809 purple_plugin_unload(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
810
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
811 plugins = g_list_remove(plugins, plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
812
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
813 if (load_queue != NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
814 load_queue = g_list_remove(load_queue, plugin);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
815
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
816 /* true, this may leak a little memory if there is a major version
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
817 * mismatch, but it's a lot better than trying to free something
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
818 * we shouldn't, and crashing while trying to load an old plugin */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
819 if(plugin->info == NULL || plugin->info->magic != PURPLE_PLUGIN_MAGIC ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
820 plugin->info->major_version != PURPLE_MAJOR_VERSION)
14024
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
821 {
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
822 if(plugin->handle)
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
823 g_module_close(plugin->handle);
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
824
14024
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
825 g_free(plugin->path);
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
826 g_free(plugin->error);
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
827
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
828 PURPLE_DBUS_UNREGISTER_POINTER(plugin);
14024
60730ce4455c [gaim-migrate @ 16515]
Mark Doliner <markdoliner@pidgin.im>
parents: 14016
diff changeset
829
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
830 g_free(plugin);
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
831 return;
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
832 }
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
833
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14024
diff changeset
834 if (plugin->info != NULL)
5243
e8d35a430c6d [gaim-migrate @ 5614]
Christian Hammond <chipx86@chipx86.com>
parents: 5242
diff changeset
835 g_list_free(plugin->info->dependencies);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
836
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
837 if (plugin->native_plugin)
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
838 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
839 if (plugin->info != NULL && plugin->info->type == PURPLE_PLUGIN_LOADER)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
840 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
841 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
842 GList *exts, *l, *next_l;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
843 PurplePlugin *p2;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
844
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
845 loader_info = PURPLE_PLUGIN_LOADER_INFO(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
846
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
847 if (loader_info != NULL && loader_info->exts != NULL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
848 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
849 for (exts = PURPLE_PLUGIN_LOADER_INFO(plugin)->exts;
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
850 exts != NULL;
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
851 exts = exts->next) {
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
852
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
853 for (l = purple_plugins_get_all(); l != NULL; l = next_l)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
854 {
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
855 next_l = l->next;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
856
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
857 p2 = l->data;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
858
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
859 if (p2->path != NULL &&
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
860 has_file_extension(p2->path, exts->data))
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
861 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
862 purple_plugin_destroy(p2);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
863 }
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
864 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
865 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
866
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
867 g_list_free(loader_info->exts);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
868 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
869
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
870 plugin_loaders = g_list_remove(plugin_loaders, plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
871 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
872
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
873 if (plugin->info != NULL && plugin->info->destroy != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
874 plugin->info->destroy(plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
875
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
876 if (plugin->handle != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
877 g_module_close(plugin->handle);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
878 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
879 else
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
880 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
881 PurplePlugin *loader;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
882 PurplePluginLoaderInfo *loader_info;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
883
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
884 loader = find_loader_for_plugin(plugin);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
885
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
886 if (loader != NULL)
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
887 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
888 loader_info = PURPLE_PLUGIN_LOADER_INFO(loader);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
889
5941
46e136a842b8 [gaim-migrate @ 6381]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
890 if (loader_info->destroy != NULL)
46e136a842b8 [gaim-migrate @ 6381]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
891 loader_info->destroy(plugin);
46e136a842b8 [gaim-migrate @ 6381]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
892 }
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
893 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
894
14016
2d2e0f347601 [gaim-migrate @ 16502]
Mark Doliner <markdoliner@pidgin.im>
parents: 13670
diff changeset
895 g_free(plugin->path);
2d2e0f347601 [gaim-migrate @ 16502]
Mark Doliner <markdoliner@pidgin.im>
parents: 13670
diff changeset
896 g_free(plugin->error);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
897
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
898 PURPLE_DBUS_UNREGISTER_POINTER(plugin);
13136
0438506e90ac [gaim-migrate @ 15497]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13107
diff changeset
899
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
900 g_free(plugin);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
901 #endif /* !PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
902 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
903
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
904 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
905 purple_plugin_is_loaded(const PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
906 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
907 g_return_val_if_fail(plugin != NULL, FALSE);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
908
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
909 return plugin->loaded;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
910 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
911
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
912 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
913 purple_plugin_is_unloadable(const PurplePlugin *plugin)
12695
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
914 {
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
915 g_return_val_if_fail(plugin != NULL, FALSE);
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
916
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
917 return plugin->unloadable;
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
918 }
0c93a42b7ee2 [gaim-migrate @ 15038]
Richard Laager <rlaager@pidgin.im>
parents: 12623
diff changeset
919
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
920 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
921 purple_plugin_get_id(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
922 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
923 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
924
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
925 return plugin->info->id;
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
926 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
927
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
928 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
929 purple_plugin_get_name(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
930 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
931 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
932
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
933 return _(plugin->info->name);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
934 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
935
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
936 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
937 purple_plugin_get_version(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
938 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
939 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
940
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
941 return plugin->info->version;
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
942 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
943
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
944 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
945 purple_plugin_get_summary(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
946 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
947 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
948
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
949 return _(plugin->info->summary);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
950 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
951
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
952 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
953 purple_plugin_get_description(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
954 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
955 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
956
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
957 return _(plugin->info->description);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
958 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
959
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
960 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
961 purple_plugin_get_author(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
962 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
963 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
964
22533
7e1e39d5db7e Allow translation/transliteration foo in the plugin window tooltip.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22090
diff changeset
965 return _(plugin->info->author);
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
966 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
967
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
968 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
969 purple_plugin_get_homepage(const PurplePlugin *plugin) {
11772
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
970 g_return_val_if_fail(plugin, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
971 g_return_val_if_fail(plugin->info, NULL);
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
972
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
973 return plugin->info->homepage;
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
974 }
0124b31e896a [gaim-migrate @ 14063]
Gary Kramlich <grim@reaperworld.com>
parents: 11378
diff changeset
975
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
976 /**************************************************************************
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
977 * Plugin IPC
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
978 **************************************************************************/
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
979 static void
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
980 destroy_ipc_info(void *data)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
981 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
982 PurplePluginIpcCommand *ipc_command = (PurplePluginIpcCommand *)data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
983 int i;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
984
9667
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
985 if (ipc_command->params != NULL)
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
986 {
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
987 for (i = 0; i < ipc_command->num_params; i++)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
988 purple_value_destroy(ipc_command->params[i]);
9667
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
989
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
990 g_free(ipc_command->params);
f66efc2631b3 [gaim-migrate @ 10519]
Christian Hammond <chipx86@chipx86.com>
parents: 9018
diff changeset
991 }
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
992
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
993 if (ipc_command->ret_value != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
994 purple_value_destroy(ipc_command->ret_value);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
995
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
996 g_free(ipc_command);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
997 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
998
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
999 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1000 purple_plugin_ipc_register(PurplePlugin *plugin, const char *command,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1001 PurpleCallback func, PurpleSignalMarshalFunc marshal,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1002 PurpleValue *ret_value, int num_params, ...)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1003 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1004 PurplePluginIpcInfo *ipc_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1005 PurplePluginIpcCommand *ipc_command;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1006
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1007 g_return_val_if_fail(plugin != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1008 g_return_val_if_fail(command != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1009 g_return_val_if_fail(func != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1010 g_return_val_if_fail(marshal != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1011
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1012 if (plugin->ipc_data == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1013 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1014 ipc_info = plugin->ipc_data = g_new0(PurplePluginIpcInfo, 1);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1015 ipc_info->commands = g_hash_table_new_full(g_str_hash, g_str_equal,
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1016 g_free, destroy_ipc_info);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1017 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1018 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1019 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1020
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1021 ipc_command = g_new0(PurplePluginIpcCommand, 1);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1022 ipc_command->func = func;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1023 ipc_command->marshal = marshal;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1024 ipc_command->num_params = num_params;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1025 ipc_command->ret_value = ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1026
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1027 if (num_params > 0)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1028 {
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1029 va_list args;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1030 int i;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1031
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1032 ipc_command->params = g_new0(PurpleValue *, num_params);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1033
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1034 va_start(args, num_params);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1035
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1036 for (i = 0; i < num_params; i++)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1037 ipc_command->params[i] = va_arg(args, PurpleValue *);
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1038
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1039 va_end(args);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1040 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1041
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1042 g_hash_table_replace(ipc_info->commands, g_strdup(command), ipc_command);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1043
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1044 ipc_info->command_count++;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1045
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1046 return TRUE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1047 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1048
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1049 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1050 purple_plugin_ipc_unregister(PurplePlugin *plugin, const char *command)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1051 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1052 PurplePluginIpcInfo *ipc_info;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1053
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1054 g_return_if_fail(plugin != NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1055 g_return_if_fail(command != NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1056
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1057 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1058
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1059 if (ipc_info == NULL ||
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1060 g_hash_table_lookup(ipc_info->commands, command) == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1061 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1062 purple_debug_error("plugins",
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1063 "IPC command '%s' was not registered for plugin %s\n",
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1064 command, plugin->info->name);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1065 return;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1066 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1067
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1068 g_hash_table_remove(ipc_info->commands, command);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1069
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1070 ipc_info->command_count--;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1071
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1072 if (ipc_info->command_count == 0)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1073 {
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1074 g_hash_table_destroy(ipc_info->commands);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1075 g_free(ipc_info);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1076
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1077 plugin->ipc_data = NULL;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1078 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1079 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1080
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1081 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1082 purple_plugin_ipc_unregister_all(PurplePlugin *plugin)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1083 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1084 PurplePluginIpcInfo *ipc_info;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1085
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1086 g_return_if_fail(plugin != NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1087
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1088 if (plugin->ipc_data == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1089 return; /* Silently ignore it. */
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1090
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1091 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1092
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1093 g_hash_table_destroy(ipc_info->commands);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1094 g_free(ipc_info);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1095
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1096 plugin->ipc_data = NULL;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1097 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1098
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1099 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1100 purple_plugin_ipc_get_params(PurplePlugin *plugin, const char *command,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1101 PurpleValue **ret_value, int *num_params,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1102 PurpleValue ***params)
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1103 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1104 PurplePluginIpcInfo *ipc_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1105 PurplePluginIpcCommand *ipc_command;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1106
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1107 g_return_val_if_fail(plugin != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1108 g_return_val_if_fail(command != NULL, FALSE);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1109
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1110 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1111
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1112 if (ipc_info == NULL ||
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1113 (ipc_command = g_hash_table_lookup(ipc_info->commands,
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1114 command)) == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1115 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1116 purple_debug_error("plugins",
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1117 "IPC command '%s' was not registered for plugin %s\n",
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1118 command, plugin->info->name);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1119
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1120 return FALSE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1121 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1122
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1123 if (num_params != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1124 *num_params = ipc_command->num_params;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1125
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1126 if (params != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1127 *params = ipc_command->params;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1128
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1129 if (ret_value != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1130 *ret_value = ipc_command->ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1131
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1132 return TRUE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1133 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1134
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1135 void *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1136 purple_plugin_ipc_call(PurplePlugin *plugin, const char *command,
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1137 gboolean *ok, ...)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1138 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1139 PurplePluginIpcInfo *ipc_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1140 PurplePluginIpcCommand *ipc_command;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1141 va_list args;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1142 void *ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1143
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1144 if (ok != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1145 *ok = FALSE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1146
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1147 g_return_val_if_fail(plugin != NULL, NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1148 g_return_val_if_fail(command != NULL, NULL);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1149
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1150 ipc_info = (PurplePluginIpcInfo *)plugin->ipc_data;
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1151
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1152 if (ipc_info == NULL ||
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1153 (ipc_command = g_hash_table_lookup(ipc_info->commands,
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1154 command)) == NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1155 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1156 purple_debug_error("plugins",
6822
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1157 "IPC command '%s' was not registered for plugin %s\n",
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1158 command, plugin->info->name);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1159
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1160 return NULL;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1161 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1162
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1163 va_start(args, ok);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1164 ipc_command->marshal(ipc_command->func, args, NULL, &ret_value);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1165 va_end(args);
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1166
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1167 if (ok != NULL)
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1168 *ok = TRUE;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1169
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1170 return ret_value;
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1171 }
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1172
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1173 /**************************************************************************
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1174 * Plugins subsystem
4adcde13ad17 [gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents: 6639
diff changeset
1175 **************************************************************************/
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1176 void *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1177 purple_plugins_get_handle(void) {
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1178 static int handle;
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1179
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1180 return &handle;
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1181 }
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1182
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1183 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1184 purple_plugins_init(void) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1185 void *handle = purple_plugins_get_handle();
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1186
21143
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1187 purple_plugins_add_search_path(LIBDIR);
15523
8505bd287c48 This renames the binary to 'pidgin', and I think it properly
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
1188
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1189 purple_signal_register(handle, "plugin-load",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1190 purple_marshal_VOID__POINTER,
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1191 NULL, 1,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1192 purple_value_new(PURPLE_TYPE_SUBTYPE,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1193 PURPLE_SUBTYPE_PLUGIN));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1194 purple_signal_register(handle, "plugin-unload",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1195 purple_marshal_VOID__POINTER,
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1196 NULL, 1,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1197 purple_value_new(PURPLE_TYPE_SUBTYPE,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1198 PURPLE_SUBTYPE_PLUGIN));
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1199 }
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1200
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1201 void
21143
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1202 purple_plugins_uninit(void)
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1203 {
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1204 void *handle = purple_plugins_get_handle();
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1205
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1206 purple_signals_disconnect_by_handle(handle);
239b2f43bef5 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents: 20190
diff changeset
1207 purple_signals_unregister_by_instance(handle);
10479
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1208 }
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1209
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1210 /**************************************************************************
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1211 * Plugins API
e9165b73e60b [gaim-migrate @ 11766]
Nathan Walp <nwalp@pidgin.im>
parents: 10464
diff changeset
1212 **************************************************************************/
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1213 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1214 purple_plugins_add_search_path(const char *path)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1215 {
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1216 g_return_if_fail(path != NULL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1217
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1218 if (g_list_find_custom(search_paths, path, (GCompareFunc)strcmp))
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1219 return;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1220
22875
50a1371d084c Use g_strdup() instead of strdup (doesn't really matter as it is never
Daniel Atallah <datallah@pidgin.im>
parents: 22867
diff changeset
1221 search_paths = g_list_append(search_paths, g_strdup(path));
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1222 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1223
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1224 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1225 purple_plugins_unload_all(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1226 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1227 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1228
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1229 while (loaded_plugins != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1230 purple_plugin_unload(loaded_plugins->data);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1231
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1232 #endif /* PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1233 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1234
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1235 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1236 purple_plugins_destroy_all(void)
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1237 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1238 #ifdef PURPLE_PLUGINS
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1239
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1240 while (plugins != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1241 purple_plugin_destroy(plugins->data);
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1242
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1243 #endif /* PURPLE_PLUGINS */
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1244 }
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1245
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1246 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1247 purple_plugins_save_loaded(const char *key)
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1248 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1249 #ifdef PURPLE_PLUGINS
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1250 GList *pl;
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1251 GList *files = NULL;
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1252
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1253 for (pl = purple_plugins_get_loaded(); pl != NULL; pl = pl->next) {
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1254 PurplePlugin *plugin = pl->data;
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1255
20870
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1256 if (plugin->info->type != PURPLE_PLUGIN_PROTOCOL &&
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1257 plugin->info->type != PURPLE_PLUGIN_LOADER &&
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1258 !g_list_find(plugins_to_disable, plugin)) {
0a689ca1985e * Add purple_plugin_disable() to prevent plugins from loading on the next
Richard Laager <rlaager@pidgin.im>
parents: 20865
diff changeset
1259 files = g_list_append(files, plugin->path);
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1260 }
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1261 }
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1262
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1263 purple_prefs_set_path_list(key, files);
15357
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1264 g_list_free(files);
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1265 #endif
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1266 }
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1267
590859c5ee92 [gaim-migrate @ 18086]
Nathan Walp <nwalp@pidgin.im>
parents: 14918
diff changeset
1268 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1269 purple_plugins_load_saved(const char *key)
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1270 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1271 #ifdef PURPLE_PLUGINS
5949
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1272 GList *f, *files;
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1273
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1274 g_return_if_fail(key != NULL);
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1275
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1276 files = purple_prefs_get_path_list(key);
5949
bb7cbf02dda9 [gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents: 5941
diff changeset
1277
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1278 for (f = files; f; f = f->next)
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1279 {
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1280 char *filename;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1281 char *basename;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1282 PurplePlugin *plugin;
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1283
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1284 if (f->data == NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1285 continue;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1286
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1287 filename = f->data;
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1288
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1289 /*
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1290 * We don't know if the filename uses Windows or Unix path
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1291 * separators (because people might be sharing a prefs.xml
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1292 * file across systems), so we find the last occurrence
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1293 * of either.
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1294 */
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1295 basename = strrchr(filename, '/');
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1296 if ((basename == NULL) || (basename < strrchr(filename, '\\')))
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1297 basename = strrchr(filename, '\\');
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1298 if (basename != NULL)
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1299 basename++;
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1300
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1301 /* Strip the extension */
13567
4ec075b1ae40 [gaim-migrate @ 15945]
Daniel Atallah <datallah@pidgin.im>
parents: 13528
diff changeset
1302 if (basename)
22867
ba95299d6ed4 Fix a bug where the list of loaded plugins would get removed when
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22533
diff changeset
1303 basename = purple_plugin_get_basename(basename);
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1304
20190
e93c4e56e79f applied changes from 63162f419a649bdd77b85cff73c4c490ec863ed1
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
1305 if (((plugin = purple_plugins_find_with_filename(filename)) != NULL) ||
e93c4e56e79f applied changes from 63162f419a649bdd77b85cff73c4c490ec863ed1
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
1306 (basename && (plugin = purple_plugins_find_with_basename(basename)) != NULL) ||
e93c4e56e79f applied changes from 63162f419a649bdd77b85cff73c4c490ec863ed1
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
1307 ((plugin = purple_plugin_probe(filename)) != NULL))
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1308 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1309 purple_debug_info("plugins", "Loading saved plugin %s\n",
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1310 plugin->path);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1311 purple_plugin_load(plugin);
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1312 }
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1313 else
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1314 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1315 purple_debug_error("plugins", "Unable to find saved plugin %s\n",
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1316 filename);
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1317 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1318
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1319 g_free(basename);
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1320
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1321 g_free(f->data);
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1322 }
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1323
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1324 g_list_free(files);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1325 #endif /* PURPLE_PLUGINS */
5838
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1326 }
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1327
1e45da0f16db [gaim-migrate @ 6269]
Nathan Walp <nwalp@pidgin.im>
parents: 5794
diff changeset
1328
5242
155da5e9bbf0 [gaim-migrate @ 5613]
Christian Hammond <chipx86@chipx86.com>
parents: 5211
diff changeset
1329 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1330 purple_plugins_probe(const char *ext)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1331 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1332 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1333 GDir *dir;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1334 const gchar *file;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1335 gchar *path;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1336 PurplePlugin *plugin;
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1337 GList *cur;
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1338 const char *search_path;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1339
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1340 if (!g_module_supported())
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1341 return;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1342
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1343 /* Probe plugins */
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1344 for (cur = search_paths; cur != NULL; cur = cur->next)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1345 {
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1346 search_path = cur->data;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1347
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1348 dir = g_dir_open(search_path, 0, NULL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1349
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1350 if (dir != NULL)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1351 {
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1352 while ((file = g_dir_read_name(dir)) != NULL)
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1353 {
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1354 path = g_build_filename(search_path, file, NULL);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1355
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1356 if (ext == NULL || has_file_extension(file, ext))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1357 plugin = purple_plugin_probe(path);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1358
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1359 g_free(path);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1360 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1361
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1362 g_dir_close(dir);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1363 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1364 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1365
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1366 /* See if we have any plugins waiting to load */
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1367 while (load_queue != NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1368 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1369 plugin = (PurplePlugin *)load_queue->data;
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1370
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1371 load_queue = g_list_remove(load_queue, plugin);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1372
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1373 if (plugin == NULL || plugin->info == NULL)
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1374 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1375
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1376 if (plugin->info->type == PURPLE_PLUGIN_LOADER)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1377 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1378 /* We'll just load this right now. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1379 if (!purple_plugin_load(plugin))
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1380 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1381 purple_plugin_destroy(plugin);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1382
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1383 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1384 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1385
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1386 plugin_loaders = g_list_append(plugin_loaders, plugin);
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1387
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1388 for (cur = PURPLE_PLUGIN_LOADER_INFO(plugin)->exts;
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1389 cur != NULL;
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1390 cur = cur->next)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1391 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1392 purple_plugins_probe(cur->data);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1393 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1394 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1395 else if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1396 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1397 /* We'll just load this right now. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1398 if (!purple_plugin_load(plugin))
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1399 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1400 purple_plugin_destroy(plugin);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1401
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1402 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1403 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1404
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
1405 /* Make sure we don't load two PRPLs with the same name? */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1406 if (purple_find_prpl(plugin->info->id))
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1407 {
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1408 /* Nothing to see here--move along, move along */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1409 purple_plugin_destroy(plugin);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1410
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1411 continue;
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1412 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1413
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1414 protocol_plugins = g_list_insert_sorted(protocol_plugins, plugin,
33982
58a0de711782 Added support for the PURPLE_PLUGIN_FLAG_AUTOLOAD flag, corrected a few bugs and crashed. The compatibility plugin is automatically loaded at startup, and works nicely in compatibility mode (read_sync, write_sync, import, export). Also, I played unsuccessfully with makefiles, so i moved the keyring up one directory. I've finally gotten to the point where I run "make && sudo make install" every now and then.
Vivien Bernet-Rollande <scrouaf@soc.pidgin.im>
parents: 23220
diff changeset
1415 (GCompareFunc)compare_prpl);
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1416 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1417 }
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1418
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1419 if (probe_cb != NULL)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1420 probe_cb(probe_cb_data);
20805
bd18a055f953 Honor the return value of a plugin's unload function.
Richard Laager <rlaager@pidgin.im>
parents: 20190
diff changeset
1421
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1422 #endif /* PURPLE_PLUGINS */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1423 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1424
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1425 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1426 purple_plugin_register(PurplePlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1427 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1428 g_return_val_if_fail(plugin != NULL, FALSE);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1429
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1430 /* If this plugin has been registered already then exit */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1431 if (g_list_find(plugins, plugin))
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1432 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1433
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1434 /* Ensure the plugin has the requisite information */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1435 if (plugin->info->type == PURPLE_PLUGIN_LOADER)
6981
749f11b02abf [gaim-migrate @ 7537]
Christian Hammond <chipx86@chipx86.com>
parents: 6822
diff changeset
1436 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1437 PurplePluginLoaderInfo *loader_info;
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1438
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1439 loader_info = PURPLE_PLUGIN_LOADER_INFO(plugin);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1440
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1441 if (loader_info == NULL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1442 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1443 purple_debug_error("plugins", "%s is not loadable, loader plugin missing loader_info\n",
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1444 plugin->path);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1445 return FALSE;
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1446 }
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1447 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1448 else if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1449 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1450 PurplePluginProtocolInfo *prpl_info;
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1451
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1452 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1453
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1454 if (prpl_info == NULL)
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1455 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1456 purple_debug_error("plugins", "%s is not loadable, protocol plugin missing prpl_info\n",
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9697
diff changeset
1457 plugin->path);
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1458 return FALSE;
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1459 }
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1460 }
8749
fb487e9e101a [gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
1461
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1462 #ifdef PURPLE_PLUGINS
10447
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1463 /* This plugin should be probed and maybe loaded--add it to the queue */
887380ec66f5 [gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents: 10279
diff changeset
1464 load_queue = g_list_append(load_queue, plugin);
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
1465 #else
12081
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1466 if (plugin->info != NULL)
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1467 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1468 if (plugin->info->type == PURPLE_PLUGIN_PROTOCOL)
12081
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1469 protocol_plugins = g_list_insert_sorted(protocol_plugins, plugin,
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1470 (GCompareFunc)compare_prpl);
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1471 if (plugin->info->load != NULL)
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1472 if (!plugin->info->load(plugin))
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1473 return FALSE;
26a81230ffb1 [gaim-migrate @ 14378]
Evan Schoenberg <evands@pidgin.im>
parents: 12077
diff changeset
1474 }
11950
a522c2da66e5 [gaim-migrate @ 14241]
Evan Schoenberg <evands@pidgin.im>
parents: 11772
diff changeset
1475 #endif
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1476
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1477 plugins = g_list_append(plugins, plugin);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1478
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1479 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1480 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1481
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1482 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1483 purple_plugins_enabled(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1484 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1485 #ifdef PURPLE_PLUGINS
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1486 return TRUE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1487 #else
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1488 return FALSE;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1489 #endif
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1490 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1491
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1492 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1493 purple_plugins_register_probe_notify_cb(void (*func)(void *), void *data)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1494 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1495 probe_cb = func;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1496 probe_cb_data = data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1497 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1498
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1499 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1500 purple_plugins_unregister_probe_notify_cb(void (*func)(void *))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1501 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1502 probe_cb = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1503 probe_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1504 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1505
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1506 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1507 purple_plugins_register_load_notify_cb(void (*func)(PurplePlugin *, void *),
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1508 void *data)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1509 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1510 load_cb = func;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1511 load_cb_data = data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1512 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1513
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1514 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1515 purple_plugins_unregister_load_notify_cb(void (*func)(PurplePlugin *, void *))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1516 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1517 load_cb = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1518 load_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1519 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1520
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1521 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1522 purple_plugins_register_unload_notify_cb(void (*func)(PurplePlugin *, void *),
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1523 void *data)
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1524 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1525 unload_cb = func;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1526 unload_cb_data = data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1527 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1528
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1529 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1530 purple_plugins_unregister_unload_notify_cb(void (*func)(PurplePlugin *, void *))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1531 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1532 unload_cb = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1533 unload_cb_data = NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1534 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1535
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1536 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1537 purple_plugins_find_with_name(const char *name)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1538 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1539 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1540 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1541
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1542 for (l = plugins; l != NULL; l = l->next) {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1543 plugin = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1544
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1545 if (!strcmp(plugin->info->name, name))
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1546 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1547 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1548
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1549 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1550 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1551
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1552 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1553 purple_plugins_find_with_filename(const char *filename)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1554 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1555 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1556 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1557
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1558 for (l = plugins; l != NULL; l = l->next) {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1559 plugin = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1560
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1561 if (plugin->path != NULL && !strcmp(plugin->path, filename))
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1562 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1563 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1564
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1565 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1566 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1567
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1568 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1569 purple_plugins_find_with_basename(const char *basename)
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1570 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1571 #ifdef PURPLE_PLUGINS
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1572 PurplePlugin *plugin;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1573 GList *l;
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1574 char *tmp;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1575
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1576 g_return_val_if_fail(basename != NULL, NULL);
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1577
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1578 for (l = plugins; l != NULL; l = l->next)
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1579 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1580 plugin = (PurplePlugin *)l->data;
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1581
7278
24abce0cd98a [gaim-migrate @ 7857]
Sean Egan <seanegan@pidgin.im>
parents: 7033
diff changeset
1582 if (plugin->path != NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1583 tmp = purple_plugin_get_basename(plugin->path);
13528
541152b0fad0 [gaim-migrate @ 15903]
Daniel Atallah <datallah@pidgin.im>
parents: 13311
diff changeset
1584 if (!strcmp(tmp, basename))
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1585 {
7278
24abce0cd98a [gaim-migrate @ 7857]
Sean Egan <seanegan@pidgin.im>
parents: 7033
diff changeset
1586 g_free(tmp);
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1587 return plugin;
7278
24abce0cd98a [gaim-migrate @ 7857]
Sean Egan <seanegan@pidgin.im>
parents: 7033
diff changeset
1588 }
7279
616bdc8cf850 [gaim-migrate @ 7858]
Nathan Walp <nwalp@pidgin.im>
parents: 7278
diff changeset
1589 g_free(tmp);
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1590 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1591 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1592
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1593 #endif /* PURPLE_PLUGINS */
10682
c293ad49121e [gaim-migrate @ 12228]
Richard Laager <rlaager@pidgin.im>
parents: 10504
diff changeset
1594
7033
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1595 return NULL;
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1596 }
f6096f69a11e [gaim-migrate @ 7596]
Robert McQueen <robot101@debian.org>
parents: 6982
diff changeset
1597
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1598 PurplePlugin *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1599 purple_plugins_find_with_id(const char *id)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1600 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1601 PurplePlugin *plugin;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1602 GList *l;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1603
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1604 g_return_val_if_fail(id != NULL, NULL);
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1605
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
1606 for (l = plugins; l != NULL; l = l->next)
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
1607 {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1608 plugin = l->data;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1609
6486
18da8fdbc85b [gaim-migrate @ 7000]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
1610 if (plugin->info->id != NULL && !strcmp(plugin->info->id, id))
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1611 return plugin;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1612 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1613
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1614 return NULL;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1615 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1616
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1617 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1618 purple_plugins_get_loaded(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1619 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1620 return loaded_plugins;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1621 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1622
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1623 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1624 purple_plugins_get_protocols(void)
5573
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1625 {
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1626 return protocol_plugins;
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1627 }
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1628
633880e3f137 [gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
1629 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1630 purple_plugins_get_all(void)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1631 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1632 return plugins;
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1633 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1634
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1635
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1636 PurplePluginAction *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1637 purple_plugin_action_new(const char* label, void (*callback)(PurplePluginAction *))
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1638 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1639 PurplePluginAction *act = g_new0(PurplePluginAction, 1);
9018
b13b46fa2f16 [gaim-migrate @ 9794]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1640
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1641 act->label = g_strdup(label);
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1642 act->callback = callback;
9018
b13b46fa2f16 [gaim-migrate @ 9794]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1643
b13b46fa2f16 [gaim-migrate @ 9794]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1644 return act;
9015
3c27e9074fa2 [gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents: 8993
diff changeset
1645 }
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1646
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1647 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15523
diff changeset
1648 purple_plugin_action_free(PurplePluginAction *action)
13107
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1649 {
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1650 g_return_if_fail(action != NULL);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1651
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1652 g_free(action->label);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1653 g_free(action);
704041197f4d [gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents: 12992
diff changeset
1654 }

mercurial