Mercurial > ~mikael > mcabber > hg
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); |