diff mcabber/mcabber/commands.c @ 1685:1342df44c814

Improved events interface * User can pass additional arguments to event handler * MUC invitation reject now can be supplied a reason
author Myhailo Danylenko <isbear@ukrpost.net>
date Tue, 02 Feb 2010 22:44:18 +0100
parents 95df4ea512c8
children 393c05fba337
line wrap: on
line diff
--- a/mcabber/mcabber/commands.c	Tue Jan 19 19:16:38 2010 +0200
+++ b/mcabber/mcabber/commands.c	Tue Feb 02 22:44:18 2010 +0100
@@ -3305,9 +3305,8 @@
   char **paramlst;
   char *evid, *subcmd;
   int action = -1;
-  GSList *evidlst;
-
-  paramlst = split_arg(arg, 2, 0); // id, subcmd
+
+  paramlst = split_arg(arg, 3, 1); // id, subcmd, optional arg
   evid = *paramlst;
   subcmd = *(paramlst+1);
 
@@ -3317,41 +3316,37 @@
       evs_display_list();
     else
       scr_LogPrint(LPRINT_NORMAL,
-                   "Missing parameter.  Usage: /event num action");
+                   "Missing parameter.  Usage: /event num action "
+                   "[event-specific args]");
     free_arg_lst(paramlst);
     return;
   }
 
   if (!strcasecmp(subcmd, "reject"))
-    action = 0;
+    action = EVS_CONTEXT_REJECT;
   else if (!strcasecmp(subcmd, "accept"))
-    action = 1;
+    action = EVS_CONTEXT_ACCEPT;
   else if (!strcasecmp(subcmd, "ignore"))
-    action = 2;
+    action = EVS_CONTEXT_CANCEL;
 
   if (action == -1) {
     scr_LogPrint(LPRINT_NORMAL, "Wrong action parameter.");
-  } else if (action >= 0 && action <= 2) {
+  } else {
     GSList *p;
-
-    if (action == 2) {
-      action = EVS_CONTEXT_CANCEL;
-    } else {
-      action += EVS_CONTEXT_USER;
-    }
+    GSList *evidlst;
 
     if (!strcmp(evid, "*")) {
       // Use completion list
-      evidlst = evs_geteventslist(FALSE);
+      evidlst = evs_geteventslist();
     } else {
       // Let's create a slist with the provided event id
-      evidlst = g_slist_append(NULL, g_strdup(evid));
+      evidlst = g_slist_append(NULL, evid);
     }
     for (p = evidlst; p; p = g_slist_next(p)) {
-      if (evs_callback(p->data, action) == -1) {
+      if (evs_callback(p->data, action,
+                       (const char*)(paramlst+2)) == -1) {
         scr_LogPrint(LPRINT_NORMAL, "Event %s not found.", p->data);
       }
-      g_free(p->data);
     }
     g_slist_free(evidlst);
   }