changeset 748:53a000411587

Add /event command
author Mikael Berthe <mikael@lilotux.net>
date Mon, 13 Mar 2006 19:18:20 +0100
parents 9875bc774ddf
children 6c633adaae10
files mcabber/src/commands.c mcabber/src/events.h
diffstat 2 files changed, 48 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/commands.c	Mon Mar 13 19:13:37 2006 +0100
+++ b/mcabber/src/commands.c	Mon Mar 13 19:18:20 2006 +0100
@@ -30,6 +30,7 @@
 #include "hbuf.h"
 #include "utils.h"
 #include "settings.h"
+#include "events.h"
 
 // Commands callbacks
 static void do_roster(char *arg);
@@ -56,6 +57,7 @@
 static void do_authorization(char *arg);
 static void do_version(char *arg);
 static void do_request(char *arg);
+static void do_event(char *arg);
 
 // Global variable for the commands list
 static GSList *Commands;
@@ -92,6 +94,7 @@
   cmd_add("connect", "Connect to the server", 0, 0, &do_connect);
   cmd_add("del", "Delete the current buddy", 0, 0, &do_del);
   cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect);
+  cmd_add("event", "Process an event", 0, 0, &do_event);
   cmd_add("group", "Change group display settings", COMPL_GROUP, 0, &do_group);
   //cmd_add("help", "Display some help", COMPL_CMD, 0, NULL);
   cmd_add("info", "Show basic info on current buddy", 0, 0, &do_info);
@@ -1942,6 +1945,43 @@
   free_arg_lst(paramlst);
 }
 
+static void do_event(char *arg)
+{
+  char **paramlst;
+  char *evid, *subcmd;
+  int action = -1;
+
+  paramlst = split_arg(arg, 2, 0); // id, subcmd
+  evid = *paramlst;
+  subcmd = *(paramlst+1);
+
+  if (!evid || !subcmd) {
+    // Special case: /event list
+    if (evid && !strcasecmp(evid, "list"))
+      evs_display_list();
+    else
+      scr_LogPrint(LPRINT_NORMAL,
+                   "Missing parameter.  Usage: /event num action");
+    free_arg_lst(paramlst);
+    return;
+  }
+
+  if (!strcasecmp(subcmd, "reject"))
+    action = 0;
+  else if (!strcasecmp(subcmd, "accept"))
+    action = 1;
+
+  if (action == -1) {
+    scr_LogPrint(LPRINT_NORMAL, "Wrong action parameter.");
+  } else if (action == 0 || action == 1) {
+    if (evs_callback(evid, EVS_CONTEXT_USER + action) == -1) {
+      scr_LogPrint(LPRINT_NORMAL, "Event %s not found.", evid);
+    }
+  }
+
+  free_arg_lst(paramlst);
+}
+
 static void do_connect(char *arg)
 {
   mcabber_connect();
--- a/mcabber/src/events.h	Mon Mar 13 19:13:37 2006 +0100
+++ b/mcabber/src/events.h	Mon Mar 13 19:18:20 2006 +0100
@@ -7,8 +7,9 @@
 #define EVS_DEFAULT_TIMEOUT 90
 #define EVS_MAX_TIMEOUT     432000
 
-#define EVS_CONTEXT_USER    0
-#define EVS_CONTEXT_TIMEOUT 1
+#define EVS_CONTEXT_TIMEOUT 0
+#define EVS_CONTEXT_CANCEL  1
+#define EVS_CONTEXT_USER    2
 
 /* Common structure for events (evs) and IQ requests (iqs) */
 typedef struct {
@@ -21,6 +22,11 @@
   xmlnode xmldata;
 } eviqs;
 
+eviqs *evs_new(guint8 type, time_t timeout);
+int    evs_del(const char *evid);
+int    evs_callback(const char *evid, guint evcontext);
+void   evs_check_timeout(time_t now_t);
+void   evs_display_list(void);
 
 #endif /* __EVENTS_H__ */