comparison 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
comparison
equal deleted inserted replaced
1684:95df4ea512c8 1685:1342df44c814
3303 static void do_event(char *arg) 3303 static void do_event(char *arg)
3304 { 3304 {
3305 char **paramlst; 3305 char **paramlst;
3306 char *evid, *subcmd; 3306 char *evid, *subcmd;
3307 int action = -1; 3307 int action = -1;
3308 GSList *evidlst; 3308
3309 3309 paramlst = split_arg(arg, 3, 1); // id, subcmd, optional arg
3310 paramlst = split_arg(arg, 2, 0); // id, subcmd
3311 evid = *paramlst; 3310 evid = *paramlst;
3312 subcmd = *(paramlst+1); 3311 subcmd = *(paramlst+1);
3313 3312
3314 if (!evid || !subcmd) { 3313 if (!evid || !subcmd) {
3315 // Special case: /event list 3314 // Special case: /event list
3316 if (evid && !strcasecmp(evid, "list")) 3315 if (evid && !strcasecmp(evid, "list"))
3317 evs_display_list(); 3316 evs_display_list();
3318 else 3317 else
3319 scr_LogPrint(LPRINT_NORMAL, 3318 scr_LogPrint(LPRINT_NORMAL,
3320 "Missing parameter. Usage: /event num action"); 3319 "Missing parameter. Usage: /event num action "
3320 "[event-specific args]");
3321 free_arg_lst(paramlst); 3321 free_arg_lst(paramlst);
3322 return; 3322 return;
3323 } 3323 }
3324 3324
3325 if (!strcasecmp(subcmd, "reject")) 3325 if (!strcasecmp(subcmd, "reject"))
3326 action = 0; 3326 action = EVS_CONTEXT_REJECT;
3327 else if (!strcasecmp(subcmd, "accept")) 3327 else if (!strcasecmp(subcmd, "accept"))
3328 action = 1; 3328 action = EVS_CONTEXT_ACCEPT;
3329 else if (!strcasecmp(subcmd, "ignore")) 3329 else if (!strcasecmp(subcmd, "ignore"))
3330 action = 2; 3330 action = EVS_CONTEXT_CANCEL;
3331 3331
3332 if (action == -1) { 3332 if (action == -1) {
3333 scr_LogPrint(LPRINT_NORMAL, "Wrong action parameter."); 3333 scr_LogPrint(LPRINT_NORMAL, "Wrong action parameter.");
3334 } else if (action >= 0 && action <= 2) { 3334 } else {
3335 GSList *p; 3335 GSList *p;
3336 3336 GSList *evidlst;
3337 if (action == 2) {
3338 action = EVS_CONTEXT_CANCEL;
3339 } else {
3340 action += EVS_CONTEXT_USER;
3341 }
3342 3337
3343 if (!strcmp(evid, "*")) { 3338 if (!strcmp(evid, "*")) {
3344 // Use completion list 3339 // Use completion list
3345 evidlst = evs_geteventslist(FALSE); 3340 evidlst = evs_geteventslist();
3346 } else { 3341 } else {
3347 // Let's create a slist with the provided event id 3342 // Let's create a slist with the provided event id
3348 evidlst = g_slist_append(NULL, g_strdup(evid)); 3343 evidlst = g_slist_append(NULL, evid);
3349 } 3344 }
3350 for (p = evidlst; p; p = g_slist_next(p)) { 3345 for (p = evidlst; p; p = g_slist_next(p)) {
3351 if (evs_callback(p->data, action) == -1) { 3346 if (evs_callback(p->data, action,
3347 (const char*)(paramlst+2)) == -1) {
3352 scr_LogPrint(LPRINT_NORMAL, "Event %s not found.", p->data); 3348 scr_LogPrint(LPRINT_NORMAL, "Event %s not found.", p->data);
3353 } 3349 }
3354 g_free(p->data);
3355 } 3350 }
3356 g_slist_free(evidlst); 3351 g_slist_free(evidlst);
3357 } 3352 }
3358 3353
3359 free_arg_lst(paramlst); 3354 free_arg_lst(paramlst);