comparison src/module.c @ 3517:6b0cb60162f4

[gaim-migrate @ 3590] Rob McQueen added a mute feature to his nice little docklet. I added a queuing feature. Configure the docklet in the plugins dialog to queue unread messages, and when you receive a message the docklet will eat it up and show a little message pending icon. Click on it, and read your message. ICQ people will like it. I also made plugin_event use a va_list. I bet this breaks perl. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Mon, 16 Sep 2002 08:35:24 +0000
parents e23909729192
children cd938f18f3f8
comparison
equal deleted inserted replaced
3516:db00eb77997d 3517:6b0cb60162f4
374 break; 374 break;
375 } 375 }
376 return buf; 376 return buf;
377 } 377 }
378 378
379 static void debug_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) 379 int plugin_event(enum gaim_event event, ...)
380 {
381 if (!opt_debug && !(misc_options & OPT_MISC_DEBUG))
382 return;
383
384 switch (event) {
385 case event_blist_update:
386 /* this happens *really* often */
387 if (opt_debug) {
388 debug_printf("%s\n", event_name(event));
389 }
390 break;
391 case event_quit:
392 debug_printf("%s\n", event_name(event));
393 break;
394 case event_signon:
395 case event_signoff:
396 debug_printf("%s: %s\n", event_name(event),
397 ((struct gaim_connection *)arg1)->username);
398 break;
399 case event_new_conversation:
400 debug_printf("%s: %s\n", event_name(event), (char *)arg1);
401 break;
402 case event_error:
403 debug_printf("%s: %d\n", event_name(event), (int)arg1);
404 break;
405 case event_buddy_signon:
406 case event_buddy_signoff:
407 case event_buddy_away:
408 case event_buddy_back:
409 case event_buddy_idle:
410 case event_buddy_unidle:
411 case event_set_info:
412 case event_got_typing:
413 debug_printf("%s: %s %s\n", event_name(event),
414 ((struct gaim_connection *)arg1)->username, (char *)arg2);
415 break;
416 case event_chat_leave:
417 debug_printf("%s: %s %d\n", event_name(event),
418 ((struct gaim_connection *)arg1)->username, (int)arg2);
419 break;
420 case event_im_send:
421 case event_im_displayed_sent:
422 debug_printf("%s: %s %s %s\n", event_name(event),
423 ((struct gaim_connection *)arg1)->username,
424 (char *)arg2, *(char **)arg3 ? *(char **)arg3 : "");
425 break;
426 case event_chat_join:
427 case event_chat_buddy_join:
428 case event_chat_buddy_leave:
429 debug_printf("%s: %s %d %s\n", event_name(event),
430 ((struct gaim_connection *)arg1)->username,
431 (int)arg2, (char *)arg3);
432 break;
433 case event_chat_send:
434 debug_printf("%s: %s %d %s\n", event_name(event),
435 ((struct gaim_connection *)arg1)->username,
436 (int)arg2, *(char **)arg3 ? *(char **)arg3 : "");
437 break;
438 case event_away:
439 debug_printf("%s: %s %s %s\n", event_name(event),
440 ((struct gaim_connection *)arg1)->username,
441 (char *)arg2, (char *)arg3 ? (char *)arg3 : "");
442 break;
443 case event_warned:
444 debug_printf("%s: %s %s %d\n", event_name(event),
445 ((struct gaim_connection *)arg1)->username,
446 (char *)arg2 ? (char *)arg2 : "", (int)arg3);
447 break;
448 case event_im_recv:
449 debug_printf("%s: %s %s %s\n", event_name(event),
450 ((struct gaim_connection *)arg1)->username,
451 *(char **)arg2 ? *(char **)arg2 : "",
452 *(char **)arg3 ? *(char **)arg3 : "");
453 break;
454 case event_im_displayed_rcvd:
455 debug_printf("%s: %s %s %s\n", event_name(event),
456 ((struct gaim_connection *)arg1)->username,
457 (char *)arg2 ? (char *)arg2 : "",
458 (char *)arg3 ? (char *)arg3 : "");
459 break;
460 case event_chat_recv:
461 debug_printf("%s: %s %d %s\n", event_name(event),
462 ((struct gaim_connection *)arg1)->username,
463 (int)arg2,
464 *(char **)arg3 ? *(char **)arg3 : "",
465 *(char **)arg4 ? *(char **)arg4 : "");
466 break;
467 case event_chat_send_invite:
468 debug_printf("%s: %s %d %s %s\n", event_name(event),
469 ((struct gaim_connection *)arg1)->username,
470 (int)arg2, (char *)arg3,
471 *(char **)arg4 ? *(char **)arg4 : "");
472 break;
473 case event_chat_invited:
474 debug_printf("%s: %s %s %s %s\n", event_name(event),
475 ((struct gaim_connection *)arg1)->username,
476 (char *)arg2, (char *)arg3,
477 (char *)arg4 ? (char *)arg4 : "");
478 break;
479 case event_del_conversation:
480 debug_printf("%s: %s\n", event_name(event), (char *)arg1);
481 break;
482 case event_connecting:
483 debug_printf("%s: %s\n", event_name(event), ((struct aim_user *)arg1)->username);
484 break;
485 default:
486 debug_printf("%s: um, right. yeah.\n", event_name(event));
487 break;
488 }
489 }
490
491 int plugin_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4)
492 { 380 {
493 #ifdef GAIM_PLUGINS 381 #ifdef GAIM_PLUGINS
494 GList *c = callbacks; 382 GList *c = callbacks;
495 struct gaim_callback *g; 383 struct gaim_callback *g;
384 va_list arrg;
385 void *arg1 = NULL,
386 *arg2 = NULL,
387 *arg3 = NULL,
388 *arg4 = NULL,
389 *arg5 = NULL;
496 #endif 390 #endif
497 391
498 debug_event(event, arg1, arg2, arg3, arg4); 392 debug_printf("%s\n", event_name(event));
499 393
500 #ifdef GAIM_PLUGINS 394 #ifdef GAIM_PLUGINS
501 while (c) { 395 while (c) {
502 void (*zero)(void *); 396 void (*cbfunc)(void *, ...);
503 void (*one)(void *, void *); 397
504 void (*two)(void *, void *, void *);
505 void (*three)(void *, void *, void *, void *);
506 void (*four)(void *, void *, void *, void *, void *);
507
508 g = (struct gaim_callback *)c->data; 398 g = (struct gaim_callback *)c->data;
509 if (g->event == event && g->function != NULL) { 399 if (g->event == event && g->function != NULL) {
400 cbfunc=g->function;
401 va_start(arrg, event);
510 switch (event) { 402 switch (event) {
511 403
512 /* no args */ 404 /* no args */
513 case event_blist_update: 405 case event_blist_update:
514 case event_quit: 406 case event_quit:
515 zero = g->function; 407 cbfunc(g->data);
516 zero(g->data);
517 break; 408 break;
518 409
519 /* one arg */ 410 /* one arg */
520 case event_signon: 411 case event_signon:
521 case event_signoff: 412 case event_signoff:
522 case event_new_conversation: 413 case event_new_conversation:
523 case event_del_conversation: 414 case event_del_conversation:
524 case event_error: 415 case event_error:
525 case event_connecting: 416 case event_connecting:
526 one = g->function; 417 arg1 = va_arg(arrg, void *);
527 one(arg1, g->data); 418 cbfunc(arg1, g->data);
528 break; 419 break;
529 420
530 /* two args */ 421 /* two args */
531 case event_buddy_signon: 422 case event_buddy_signon:
532 case event_buddy_signoff: 423 case event_buddy_signoff:
533 case event_buddy_away: 424 case event_buddy_away:
534 case event_buddy_back: 425 case event_buddy_back:
535 case event_buddy_idle: 426 case event_buddy_idle:
536 case event_buddy_unidle: 427 case event_buddy_unidle:
537 case event_chat_leave:
538 case event_set_info: 428 case event_set_info:
539 case event_draw_menu: 429 case event_draw_menu:
540 case event_got_typing: 430 case event_got_typing:
541 two = g->function; 431 arg1 = va_arg(arrg, void *);
542 two(arg1, arg2, g->data); 432 arg2 = va_arg(arrg, void *);
543 break; 433 cbfunc(arg1, arg2, g->data);
544 434 break;
435 case event_chat_leave:
436 {
437 int id;
438 arg1 = va_arg(arrg, void*);
439 id = va_arg(arrg, int);
440 cbfunc(arg1, id, g->data);
441 }
442 break;
545 /* three args */ 443 /* three args */
546 case event_im_send: 444 case event_im_send:
547 case event_im_displayed_sent: 445 case event_im_displayed_sent:
548 case event_chat_join: 446 case event_away:
447 arg1 = va_arg(arrg, void *);
448 arg2 = va_arg(arrg, void *);
449 arg3 = va_arg(arrg, void *);
450 cbfunc(arg1, arg2, arg3, g->data);
451 break;
549 case event_chat_buddy_join: 452 case event_chat_buddy_join:
550 case event_chat_buddy_leave: 453 case event_chat_buddy_leave:
551 case event_chat_send: 454 case event_chat_send:
552 case event_away: 455 case event_chat_join:
553 case event_back: 456 {
457 int id;
458 arg1 = va_arg(arrg, void*);
459 id = va_arg(arrg, int);
460 arg3 = va_arg(arrg, void*);
461 cbfunc(arg1, id, arg3, g->data);
462 }
463 break;
554 case event_warned: 464 case event_warned:
555 three = g->function; 465 {
556 three(arg1, arg2, arg3, g->data); 466 int id;
557 break; 467 arg1 = va_arg(arrg, void*);
558 468 arg2 = va_arg(arrg, void*);
469 id = va_arg(arrg, int);
470 cbfunc(arg1, arg2, id, g->data);
471 }
472 break;
559 /* four args */ 473 /* four args */
560 case event_im_recv: 474 case event_im_recv:
475 case event_chat_invited:
476 arg1 = va_arg(arrg, void *);
477 arg2 = va_arg(arrg, void *);
478 arg3 = va_arg(arrg, void *);
479 arg4 = va_arg(arrg, void *);
480 cbfunc(arg1, arg2, arg3, arg4, g->data);
481 break;
561 case event_chat_recv: 482 case event_chat_recv:
483 case event_chat_send_invite:
484 {
485 int id;
486 arg1 = va_arg(arrg, void *);
487 id = va_arg(arrg, int);
488
489 arg3 = va_arg(arrg, void *);
490 arg4 = va_arg(arrg, void *);
491 cbfunc(arg1, id, arg3, arg4, g->data);
492 }
493 break;
494 /* five args */
562 case event_im_displayed_rcvd: 495 case event_im_displayed_rcvd:
563 case event_chat_send_invite: 496 {
564 case event_chat_invited: 497 time_t time;
565 four = g->function; 498 arg1 = va_arg(arrg, void *);
566 four(arg1, arg2, arg3, arg4, g->data); 499 arg2 = va_arg(arrg, void *);
567 break; 500 arg3 = va_arg(arrg, void *);
568 501 arg4 = va_arg(arrg, void *);
569 default: 502 time = va_arg(arrg, time_t);
503 cbfunc(arg1, arg2, arg3, arg4, time, g->data);
504 }
505 break;
506 default:
570 debug_printf("unknown event %d\n", event); 507 debug_printf("unknown event %d\n", event);
571 break; 508 break;
572 } 509 }
510 va_end(arrg);
573 } 511 }
574 c = c->next; 512 c = c->next;
575 } 513 }
576 #endif /* GAIM_PLUGINS */ 514 #endif /* GAIM_PLUGINS */
577 #ifdef USE_PERL 515 #ifdef USE_PERL
578 return perl_event(event, arg1, arg2, arg3, arg4); 516 va_start(arrg, event);
517 arg1 = va_arg(arrg, void *);
518 arg2 = va_arg(arrg, void *);
519 arg3 = va_arg(arrg, void *);
520 arg4 = va_arg(arrg, void *);
521 arg5 = va_arg(arrg, void *);
522 return perl_event(event, arg1, arg2, arg3, arg4, arg5);
579 #else 523 #else
580 return 0; 524 return 0;
581 #endif 525 #endif
582 } 526 }
583 527