Mercurial > pidgin
annotate src/module.c @ 2906:538c58b43eff
[gaim-migrate @ 2919]
save
save me from this
wandered around the town
all the thousand things
i might miss
and you
think we'll suffer much
think we'll close our eyes
just to see the light
pass us by
with tomorrow coming
hope that i don't let you
down again
said i'm so glad to be here
does it mean a thing
if only i could breathe what you breathe
if only i could see what you see
sit
we'll take our time
watching the flowers grow
all the friends we've known
say goodbye
and you
did you suffer much
did you close your eyes
just to see the night
rush on by
gathered all around you
hope that we don't let you
down again
i said i'm so glad to be here
does it mean a thing
if only i could breathe what you breathe
if only i could see what you see
i said i'm so glad to be here
does it mean a thing
if only i could breathe what you breathe
if only i could see what you see
if only i could just believe a thing
--Moist, "Breathe" (as transcribed by http://www.veddma.com/veddma/moist.htm)
Patches from:
Ari Pollak
Ben Miller
Mark Doliner
Sean Egan
Vincas Ciziunas
Thanks everyone.
Somewhere in the middle of all of this it started to get really tedious and annoying. I think it's getting close to the point where I quit.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 21 Dec 2001 10:23:04 +0000 |
| parents | cd23279122ed |
| children | 7239a392486c |
| rev | line source |
|---|---|
| 2393 | 1 /* |
| 2 * gaim | |
| 3 * | |
| 4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or modify | |
| 7 * it under the terms of the GNU General Public License as published by | |
| 8 * the Free Software Foundation; either version 2 of the License, or | |
| 9 * (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, | |
| 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 * GNU General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 * | |
| 20 * ---------------- | |
| 21 * The Plug-in plug | |
| 22 * | |
| 23 * Plugin support is currently being maintained by Mike Saraf | |
| 24 * msaraf@dwc.edu | |
| 25 * | |
| 26 * Well, I didn't see any work done on it for a while, so I'm going to try | |
| 27 * my hand at it. - Eric warmenhoven@yahoo.com | |
| 28 * | |
| 29 * Mike is my roomate. I can assure you that he's lazy :-P -- Rob rob@marko.net | |
| 30 * | |
| 31 */ | |
| 32 | |
| 33 #ifdef HAVE_CONFIG_H | |
| 34 #include <config.h> | |
| 35 #endif | |
| 36 | |
|
2414
70cb0ce6991a
[gaim-migrate @ 2427]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2405
diff
changeset
|
37 #include "gaim.h" |
|
70cb0ce6991a
[gaim-migrate @ 2427]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2405
diff
changeset
|
38 |
| 2393 | 39 #ifdef GAIM_PLUGINS |
| 40 | |
| 41 #include <string.h> | |
| 42 #include <sys/time.h> | |
| 43 | |
| 44 #include <sys/types.h> | |
| 45 #include <sys/stat.h> | |
| 46 | |
| 47 #include <unistd.h> | |
| 48 #include <stdio.h> | |
| 49 #include <stdlib.h> | |
| 50 | |
| 51 /* ------------------ Global Variables ----------------------- */ | |
| 52 | |
| 53 GList *plugins = NULL; | |
| 54 GList *callbacks = NULL; | |
| 55 | |
|
2405
6e637ad18494
[gaim-migrate @ 2418]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
56 char *last_dir = NULL; |
|
6e637ad18494
[gaim-migrate @ 2418]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
57 |
| 2393 | 58 /* --------------- Function Declarations --------------------- */ |
| 59 | |
| 60 struct gaim_plugin * load_plugin(char *); | |
| 61 void unload_plugin(struct gaim_plugin *p); | |
| 62 struct gaim_plugin *reload_plugin(struct gaim_plugin *p); | |
| 63 | |
| 64 void gaim_signal_connect(GModule *, enum gaim_event, void *, void *); | |
| 65 void gaim_signal_disconnect(GModule *, enum gaim_event, void *); | |
| 66 void gaim_plugin_unload(GModule *); | |
| 67 | |
| 68 /* --------------- Static Function Declarations ------------- */ | |
| 69 | |
| 70 static void plugin_remove_callbacks(GModule *); | |
| 71 | |
| 72 /* ------------------ Code Below ---------------------------- */ | |
| 73 | |
| 74 struct gaim_plugin *load_plugin(char *filename) | |
| 75 { | |
| 76 struct gaim_plugin *plug; | |
| 77 GList *c = plugins; | |
| 78 char *(*gaim_plugin_init)(GModule *); | |
| 79 char *(*cfunc)(); | |
| 80 char *error; | |
| 81 char *retval; | |
| 82 | |
| 83 if (!g_module_supported()) | |
| 84 return NULL; | |
| 85 if (filename && !strlen(filename)) | |
| 86 return NULL; | |
| 87 | |
| 88 while (filename && c) { | |
| 89 plug = (struct gaim_plugin *)c->data; | |
| 90 if (!strcmp(filename, g_module_name(plug->handle))) { | |
| 91 /* just need to reload plugin */ | |
| 92 return reload_plugin(plug); | |
| 93 } else | |
| 94 c = g_list_next(c); | |
| 95 } | |
| 96 plug = g_malloc(sizeof *plug); | |
| 97 | |
|
2405
6e637ad18494
[gaim-migrate @ 2418]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
98 if (last_dir) |
|
6e637ad18494
[gaim-migrate @ 2418]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
99 g_free(last_dir); |
|
6e637ad18494
[gaim-migrate @ 2418]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
100 last_dir = g_dirname(filename); |
|
6e637ad18494
[gaim-migrate @ 2418]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
101 |
| 2393 | 102 debug_printf("Loading %s\n", filename); |
| 103 plug->handle = g_module_open(filename, 0); | |
| 104 if (!plug->handle) { | |
| 105 error = (char *)g_module_error(); | |
| 106 do_error_dialog(error, _("Plugin Error")); | |
| 107 g_free(plug); | |
| 108 return NULL; | |
| 109 } | |
| 110 | |
| 111 if (!g_module_symbol(plug->handle, "gaim_plugin_init", (gpointer *)&gaim_plugin_init)) { | |
| 112 do_error_dialog(g_module_error(), _("Plugin Error")); | |
| 113 g_module_close(plug->handle); | |
| 114 g_free(plug); | |
| 115 return NULL; | |
| 116 } | |
| 117 | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
118 retval = gaim_plugin_init(plug->handle); |
| 2393 | 119 debug_printf("loaded plugin returned %s\n", retval ? retval : "NULL"); |
| 120 if (retval) { | |
| 121 plugin_remove_callbacks(plug->handle); | |
| 122 do_error_dialog(retval, _("Plugin Error")); | |
| 123 g_module_close(plug->handle); | |
| 124 g_free(plug); | |
| 125 return NULL; | |
| 126 } | |
| 127 | |
| 128 plugins = g_list_append(plugins, plug); | |
| 129 | |
| 130 if (g_module_symbol(plug->handle, "name", (gpointer *)&cfunc)) { | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
131 plug->name = cfunc(); |
| 2393 | 132 } else { |
| 133 plug->name = NULL; | |
| 134 } | |
| 135 | |
| 136 if (g_module_symbol(plug->handle, "description", (gpointer *)&cfunc)) | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
137 plug->description = cfunc(); |
| 2393 | 138 else |
| 139 plug->description = NULL; | |
| 140 | |
| 141 save_prefs(); | |
| 142 return plug; | |
| 143 } | |
| 144 | |
| 145 static void unload_gaim_plugin(struct gaim_plugin *p) | |
| 146 { | |
| 147 void (*gaim_plugin_remove)(); | |
| 148 | |
| 149 debug_printf("Unloading %s\n", g_module_name(p->handle)); | |
| 150 | |
| 151 /* Attempt to call the plugin's remove function (if there) */ | |
| 152 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
153 gaim_plugin_remove(); |
| 2393 | 154 |
| 155 plugin_remove_callbacks(p->handle); | |
| 156 | |
| 157 plugins = g_list_remove(plugins, p); | |
| 158 g_free(p); | |
| 159 save_prefs(); | |
| 160 } | |
| 161 | |
| 162 void unload_plugin(struct gaim_plugin *p) | |
| 163 { | |
| 164 GModule *handle = p->handle; | |
| 165 unload_gaim_plugin(p); | |
| 166 g_module_close(handle); | |
| 167 } | |
| 168 | |
| 169 static gboolean unload_timeout(gpointer handle) | |
| 170 { | |
| 171 g_module_close(handle); | |
| 172 return FALSE; | |
| 173 } | |
| 174 | |
| 175 void gaim_plugin_unload(GModule *handle) | |
| 176 { | |
|
2494
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
177 GList *pl = plugins; |
|
2511
a83b4a5ffcd6
[gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
178 struct gaim_plugin *p = NULL; |
|
2494
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
179 void (*gaim_plugin_remove)(); |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
180 |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
181 while (pl) { |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
182 p = pl->data; |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
183 if (p->handle == handle) |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
184 break; |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
185 pl = pl->next; |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
186 } |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
187 if (!pl) |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
188 return; |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
189 |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
190 debug_printf("Unloading %s\n", g_module_name(p->handle)); |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
191 |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
192 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
193 gaim_plugin_remove(); |
|
2494
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
194 plugin_remove_callbacks(p->handle); |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
195 plugins = g_list_remove(plugins, p); |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
196 g_free(p); |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
197 /* XXX CUI need to tell UI what happened, but not like this */ |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
198 update_show_plugins(); |
|
2c1950c5544a
[gaim-migrate @ 2507]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2465
diff
changeset
|
199 |
| 2393 | 200 g_timeout_add(5000, unload_timeout, handle); |
| 201 } | |
| 202 | |
| 203 /* Do unload/load cycle of plugin. */ | |
| 204 struct gaim_plugin *reload_plugin(struct gaim_plugin *p) | |
| 205 { | |
| 206 char file[1024]; | |
| 207 GModule *handle = p->handle; | |
| 208 | |
| 209 strncpy(file, g_module_name(handle), sizeof(file)); | |
| 210 file[sizeof(file) - 1] = '\0'; | |
| 211 | |
| 212 debug_printf("Reloading %s\n", file); | |
| 213 | |
| 214 /* Unload */ | |
| 215 unload_plugin(p); | |
| 216 | |
| 217 /* Load */ | |
| 218 return load_plugin(file); | |
| 219 } | |
| 220 | |
| 221 /* Remove all callbacks associated with plugin handle */ | |
| 222 static void plugin_remove_callbacks(GModule *handle) | |
| 223 { | |
| 224 GList *c = callbacks; | |
| 225 struct gaim_callback *g; | |
| 226 | |
| 227 debug_printf("%d callbacks to search\n", g_list_length(callbacks)); | |
| 228 | |
| 229 while (c) { | |
| 230 g = (struct gaim_callback *)c->data; | |
| 231 if (g->handle == handle) { | |
| 232 c = g_list_next(c); | |
| 233 callbacks = g_list_remove(callbacks, (gpointer)g); | |
| 234 debug_printf("Removing callback, %d remain\n", g_list_length(callbacks)); | |
| 235 } else | |
| 236 c = g_list_next(c); | |
| 237 } | |
| 238 } | |
| 239 | |
| 240 void gaim_signal_connect(GModule *handle, enum gaim_event which, void *func, void *data) | |
| 241 { | |
| 242 struct gaim_callback *call = g_new0(struct gaim_callback, 1); | |
| 243 call->handle = handle; | |
| 244 call->event = which; | |
| 245 call->function = func; | |
| 246 call->data = data; | |
| 247 | |
| 248 callbacks = g_list_append(callbacks, call); | |
| 249 debug_printf("Adding callback %d\n", g_list_length(callbacks)); | |
| 250 } | |
| 251 | |
| 252 void gaim_signal_disconnect(GModule *handle, enum gaim_event which, void *func) | |
| 253 { | |
| 254 GList *c = callbacks; | |
| 255 struct gaim_callback *g = NULL; | |
| 256 | |
| 257 while (c) { | |
| 258 g = (struct gaim_callback *)c->data; | |
| 259 if (handle == g->handle && func == g->function) { | |
| 260 callbacks = g_list_remove(callbacks, c->data); | |
| 261 g_free(g); | |
| 262 c = callbacks; | |
| 263 if (c == NULL) | |
| 264 break; | |
| 265 } | |
| 266 c = g_list_next(c); | |
| 267 } | |
| 268 } | |
| 269 | |
| 270 #endif /* GAIM_PLUGINS */ | |
| 271 | |
|
2511
a83b4a5ffcd6
[gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
272 char *event_name(enum gaim_event event) |
| 2393 | 273 { |
| 274 static char buf[128]; | |
| 275 switch (event) { | |
| 276 case event_signon: | |
| 277 sprintf(buf, "event_signon"); | |
| 278 break; | |
| 279 case event_signoff: | |
| 280 sprintf(buf, "event_signoff"); | |
| 281 break; | |
| 282 case event_away: | |
| 283 sprintf(buf, "event_away"); | |
| 284 break; | |
| 285 case event_back: | |
| 286 sprintf(buf, "event_back"); | |
| 287 break; | |
| 288 case event_im_recv: | |
| 289 sprintf(buf, "event_im_recv"); | |
| 290 break; | |
| 291 case event_im_send: | |
| 292 sprintf(buf, "event_im_send"); | |
| 293 break; | |
| 294 case event_buddy_signon: | |
| 295 sprintf(buf, "event_buddy_signon"); | |
| 296 break; | |
| 297 case event_buddy_signoff: | |
| 298 sprintf(buf, "event_buddy_signoff"); | |
| 299 break; | |
| 300 case event_buddy_away: | |
| 301 sprintf(buf, "event_buddy_away"); | |
| 302 break; | |
| 303 case event_buddy_back: | |
| 304 sprintf(buf, "event_buddy_back"); | |
| 305 break; | |
| 306 case event_buddy_idle: | |
| 307 sprintf(buf, "event_buddy_idle"); | |
| 308 break; | |
| 309 case event_buddy_unidle: | |
| 310 sprintf(buf, "event_buddy_unidle"); | |
| 311 break; | |
| 312 case event_blist_update: | |
| 313 sprintf(buf, "event_blist_update"); | |
| 314 break; | |
| 315 case event_chat_invited: | |
| 316 sprintf(buf, "event_chat_invited"); | |
| 317 break; | |
| 318 case event_chat_join: | |
| 319 sprintf(buf, "event_chat_join"); | |
| 320 break; | |
| 321 case event_chat_leave: | |
| 322 sprintf(buf, "event_chat_leave"); | |
| 323 break; | |
| 324 case event_chat_buddy_join: | |
| 325 sprintf(buf, "event_chat_buddy_join"); | |
| 326 break; | |
| 327 case event_chat_buddy_leave: | |
| 328 sprintf(buf, "event_chat_buddy_leave"); | |
| 329 break; | |
| 330 case event_chat_recv: | |
| 331 sprintf(buf, "event_chat_recv"); | |
| 332 break; | |
| 333 case event_chat_send: | |
| 334 sprintf(buf, "event_chat_send"); | |
| 335 break; | |
| 336 case event_warned: | |
| 337 sprintf(buf, "event_warned"); | |
| 338 break; | |
| 339 case event_error: | |
| 340 sprintf(buf, "event_error"); | |
| 341 break; | |
| 342 case event_quit: | |
| 343 sprintf(buf, "event_quit"); | |
| 344 break; | |
| 345 case event_new_conversation: | |
| 346 sprintf(buf, "event_new_conversation"); | |
| 347 break; | |
| 348 case event_set_info: | |
| 349 sprintf(buf, "event_set_info"); | |
| 350 break; | |
| 351 case event_draw_menu: | |
| 352 sprintf(buf, "event_draw_menu"); | |
| 353 break; | |
| 354 case event_im_displayed_sent: | |
| 355 sprintf(buf, "event_im_displayed_sent"); | |
| 356 break; | |
| 357 case event_im_displayed_rcvd: | |
| 358 sprintf(buf, "event_im_displayed_rcvd"); | |
| 359 break; | |
| 360 case event_chat_send_invite: | |
| 361 sprintf(buf, "event_chat_send_invite"); | |
| 362 break; | |
| 363 default: | |
| 364 sprintf(buf, "event_unknown"); | |
| 365 break; | |
| 366 } | |
| 367 return buf; | |
| 368 } | |
| 369 | |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
370 static void debug_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
371 { |
|
2823
cd23279122ed
[gaim-migrate @ 2836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2662
diff
changeset
|
372 if (!opt_debug && !(misc_options & OPT_MISC_DEBUG)) |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
373 return; |
|
2823
cd23279122ed
[gaim-migrate @ 2836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2662
diff
changeset
|
374 |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
375 switch (event) { |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
376 case event_quit: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
377 debug_printf("%s\n", event_name(event)); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
378 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
379 case event_signon: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
380 case event_signoff: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
381 debug_printf("%s: %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
382 ((struct gaim_connection *)arg1)->username); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
383 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
384 case event_new_conversation: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
385 debug_printf("event_new_conversation: %s\n", (char *)arg1); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
386 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
387 case event_error: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
388 debug_printf("event_error: %d\n", (int)arg1); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
389 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
390 case event_buddy_signon: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
391 case event_buddy_signoff: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
392 case event_buddy_away: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
393 case event_buddy_back: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
394 case event_buddy_idle: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
395 case event_buddy_unidle: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
396 case event_set_info: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
397 debug_printf("%s: %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
398 ((struct gaim_connection *)arg1)->username, (char *)arg2); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
399 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
400 case event_chat_leave: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
401 debug_printf("event_chat_leave: %s %d\n", |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
402 ((struct gaim_connection *)arg1)->username, (int)arg2); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
403 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
404 case event_im_send: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
405 case event_im_displayed_sent: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
406 debug_printf("%s: %s %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
407 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
408 (char *)arg2, *(char **)arg3 ? *(char **)arg3 : ""); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
409 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
410 case event_chat_join: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
411 case event_chat_buddy_join: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
412 case event_chat_buddy_leave: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
413 debug_printf("%s: %s %d %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
414 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
415 (int)arg2, (char *)arg3); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
416 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
417 case event_chat_send: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
418 debug_printf("%s: %s %d %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
419 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
420 (int)arg2, *(char **)arg3 ? *(char **)arg3 : ""); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
421 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
422 case event_away: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
423 debug_printf("%s: %s %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
424 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
425 (char *)arg2, (char *)arg3 ? (char *)arg3 : ""); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
426 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
427 case event_warned: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
428 debug_printf("%s: %s %s %d\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
429 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
430 (char *)arg2 ? (char *)arg2 : "", (int)arg3); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
431 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
432 case event_im_recv: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
433 debug_printf("%s: %s %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
434 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
435 *(char **)arg2 ? *(char **)arg2 : "", |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
436 *(char **)arg3 ? *(char **)arg3 : ""); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
437 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
438 case event_im_displayed_rcvd: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
439 debug_printf("%s: %s %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
440 ((struct gaim_connection *)arg1)->username, |
|
2464
59f61bfef2b3
[gaim-migrate @ 2477]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2463
diff
changeset
|
441 (char *)arg2 ? (char *)arg2 : "", |
|
59f61bfef2b3
[gaim-migrate @ 2477]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2463
diff
changeset
|
442 (char *)arg3 ? (char *)arg3 : ""); |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
443 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
444 case event_chat_recv: |
|
2465
7f36b34f8676
[gaim-migrate @ 2478]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2464
diff
changeset
|
445 debug_printf("%s: %s %d %s\n", event_name(event), |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
446 ((struct gaim_connection *)arg1)->username, |
|
2465
7f36b34f8676
[gaim-migrate @ 2478]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2464
diff
changeset
|
447 (int)arg2, |
|
7f36b34f8676
[gaim-migrate @ 2478]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2464
diff
changeset
|
448 (char *)arg3 ? (char *)arg3 : "", |
|
7f36b34f8676
[gaim-migrate @ 2478]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2464
diff
changeset
|
449 (char *)arg4 ? (char *)arg4 : ""); |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
450 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
451 case event_chat_send_invite: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
452 debug_printf("%s: %s %d %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
453 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
454 (int)arg2, (char *)arg3, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
455 *(char **)arg4 ? *(char **)arg4 : ""); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
456 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
457 case event_chat_invited: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
458 debug_printf("%s: %s %s %s %s\n", event_name(event), |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
459 ((struct gaim_connection *)arg1)->username, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
460 (char *)arg2, (char *)arg3, |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
461 (char *)arg4 ? (char *)arg4 : ""); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
462 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
463 default: |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
464 break; |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
465 } |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
466 } |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
467 |
| 2393 | 468 int plugin_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) |
| 469 { | |
| 470 #ifdef GAIM_PLUGINS | |
| 471 GList *c = callbacks; | |
| 472 struct gaim_callback *g; | |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
473 #endif |
| 2393 | 474 |
|
2463
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
475 debug_event(event, arg1, arg2, arg3, arg4); |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
476 |
|
0be6fadaa64f
[gaim-migrate @ 2476]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2443
diff
changeset
|
477 #ifdef GAIM_PLUGINS |
| 2393 | 478 while (c) { |
| 479 void (*zero)(void *); | |
| 480 void (*one)(void *, void *); | |
| 481 void (*two)(void *, void *, void *); | |
| 482 void (*three)(void *, void *, void *, void *); | |
| 483 void (*four)(void *, void *, void *, void *, void *); | |
| 484 | |
| 485 g = (struct gaim_callback *)c->data; | |
|
2511
a83b4a5ffcd6
[gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
486 if (g->event == event && g->function != NULL) { |
| 2393 | 487 switch (event) { |
| 488 | |
| 489 /* no args */ | |
| 490 case event_blist_update: | |
| 491 case event_quit: | |
| 492 zero = g->function; | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
493 zero(g->data); |
| 2393 | 494 break; |
| 495 | |
| 496 /* one arg */ | |
| 497 case event_signon: | |
| 498 case event_signoff: | |
| 499 case event_new_conversation: | |
| 500 case event_error: | |
| 501 one = g->function; | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
502 one(arg1, g->data); |
| 2393 | 503 break; |
| 504 | |
| 505 /* two args */ | |
| 506 case event_buddy_signon: | |
| 507 case event_buddy_signoff: | |
| 508 case event_buddy_away: | |
| 509 case event_buddy_back: | |
| 510 case event_buddy_idle: | |
| 511 case event_buddy_unidle: | |
| 512 case event_chat_leave: | |
| 513 case event_set_info: | |
| 514 case event_draw_menu: | |
| 515 two = g->function; | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
516 two(arg1, arg2, g->data); |
| 2393 | 517 break; |
| 518 | |
| 519 /* three args */ | |
| 520 case event_im_send: | |
| 521 case event_im_displayed_sent: | |
| 522 case event_chat_join: | |
| 523 case event_chat_buddy_join: | |
| 524 case event_chat_buddy_leave: | |
| 525 case event_chat_send: | |
| 526 case event_away: | |
| 527 case event_back: | |
| 528 case event_warned: | |
| 529 three = g->function; | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
530 three(arg1, arg2, arg3, g->data); |
| 2393 | 531 break; |
| 532 | |
| 533 /* four args */ | |
| 534 case event_im_recv: | |
| 535 case event_chat_recv: | |
| 536 case event_im_displayed_rcvd: | |
| 537 case event_chat_send_invite: | |
| 538 case event_chat_invited: | |
| 539 four = g->function; | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
540 four(arg1, arg2, arg3, arg4, g->data); |
| 2393 | 541 break; |
| 542 | |
| 543 default: | |
| 544 debug_printf("unknown event %d\n", event); | |
| 545 break; | |
| 546 } | |
| 547 } | |
| 548 c = c->next; | |
| 549 } | |
| 550 #endif /* GAIM_PLUGINS */ | |
| 551 #ifdef USE_PERL | |
|
2511
a83b4a5ffcd6
[gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
552 return perl_event(event, arg1, arg2, arg3, arg4); |
| 2393 | 553 #else |
| 554 return 0; | |
| 555 #endif | |
| 556 } | |
| 557 | |
| 558 /* Calls the gaim_plugin_remove function in any loaded plugin that has one */ | |
| 559 #ifdef GAIM_PLUGINS | |
| 560 void remove_all_plugins() | |
| 561 { | |
| 562 GList *c = plugins; | |
| 563 struct gaim_plugin *p; | |
| 564 void (*gaim_plugin_remove)(); | |
| 565 | |
| 566 while (c) { | |
| 567 p = (struct gaim_plugin *)c->data; | |
| 568 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) | |
|
2662
b0c5770156e1
[gaim-migrate @ 2675]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2511
diff
changeset
|
569 gaim_plugin_remove(); |
| 2393 | 570 g_free(p); |
| 571 c = c->next; | |
| 572 } | |
| 573 } | |
| 574 #endif |
