diff --git a/src/mode/mam.c b/src/mode/mam.c index 11ab4f6..0881abb 100644 --- a/src/mode/mam.c +++ b/src/mode/mam.c @@ -42,24 +42,37 @@ #include "mam.h" #include "stdio.h" +#include "stdbool.h" +#include "stdlib.h" #include "string.h" -static void _mam_request(xmppc_t *xmppc, char* to); +static void _mam_request(xmppc_t *xmppc, char* to, bool pretty); static int _mam_show(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *const userdata); static int _mam_display_message(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *const userdata); +static int _mam_display_pretty_message(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *const userdata); void mam_execute_command (xmppc_t *xmppc, int argc, char *argv[]) { - if(argc == 2 && strcmp("list", argv[0]) == 0) { - _mam_request(xmppc, argv[1]); - } else { - printf("Command unbekannt!"); - xmpp_disconnect(xmppc->conn); + if(argc == 2) { + if (strcmp("list", argv[0]) == 0) { + _mam_request(xmppc, argv[1], false); + return; + } else if (strcmp("pretty", argv[0]) == 0) { + _mam_request(xmppc, argv[1], true); + return; + } } + + printf("Command unbekannt!"); + xmpp_disconnect(xmppc->conn); } -static void _mam_request(xmppc_t *xmppc, char* to) { +static void _mam_request(xmppc_t *xmppc, char* to, bool pretty) { + if (pretty) { + xmpp_handler_add (xmppc->conn, _mam_display_pretty_message, NULL,"message",NULL, xmppc); + } else { xmpp_handler_add (xmppc->conn, _mam_display_message, NULL,"message",NULL, xmppc); + } char* id = xmpp_uuid_gen(xmppc->ctx); xmpp_stanza_t *iq = xmpp_iq_new(xmppc->ctx, "set", id); @@ -127,3 +140,29 @@ static int _mam_display_message(xmpp_conn_t *const conn, xmpp_stanza_t *const st } return 1; } + +static int _mam_display_pretty_message(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *const userdata) +{ + xmpp_stanza_t* result = xmpp_stanza_get_child_by_name(stanza,"result"); + + if( result && strcmp("urn:xmpp:mam:2", xmpp_stanza_get_ns(result)) == 0 ) { + + xmpp_stanza_t* forwarded = xmpp_stanza_get_child_by_ns(result, "urn:xmpp:forward:0"); + if (forwarded) { + + xmpp_stanza_t* message = xmpp_stanza_get_child_by_name(forwarded, "message"); + if (message) { + const char* const from = xmpp_stanza_get_from(message); + xmpp_stanza_t* body = xmpp_stanza_get_child_by_name(message, "body"); + + if (body) { + char *text = xmpp_stanza_get_text(body); + printf("%s%s\x1b[m: %s\n", ANSI_COLOR_YELLOW, from, text); + free(text); + } + } + } + } + + return 1; +}