[ADD/WIP] Start making a simple SAX parser, ASwerk

This commit is contained in:
LDA 2024-06-15 12:29:34 +02:00
commit 79217d3608
14 changed files with 1066 additions and 26 deletions

69
src/MatrixEventHandler.c Normal file
View file

@ -0,0 +1,69 @@
#include <Parsee.h>
#include <Cytoplasm/Json.h>
#include <Cytoplasm/Str.h>
#include <Cytoplasm/Log.h>
#include <Matrix.h>
#include <AS.h>
#define GrabString(obj, ...) JsonValueAsString(JsonGet(obj, __VA_ARGS__))
static void
ParseeMemberHandler(const ParseeConfig *conf, HashMap *event)
{
char *state_key = GrabString(event, 1, "state_key");
char *membership = GrabString(event, 2, "content", "membership");
char *room_id = GrabString(event, 1, "room_id");
Log(LOG_INFO, "Membership '%s'->'%s'", state_key, membership);
if (StrEquals(membership, "invite") && ParseeIsPuppet(conf, state_key))
{
Log(LOG_INFO, "Looks like %s was invited to %s",
state_key,
GrabString(event, 1, "room_id")
);
ASJoin(conf, room_id, state_key);
}
}
static void
ParseeMessageHandler(const ParseeConfig *conf, HashMap *event)
{
char *msgtype = GrabString(event, 2, "content", "msgtype");
char *body = GrabString(event, 2, "content", "body");
char *id = GrabString(event, 1, "room_id");
if (StrEquals(body, "!help"))
{
Log(LOG_ERR, "Not implemented!");
ASSend(conf, id, NULL, "m.room.message",
MatrixCreateNotice("No help, pal.")
);
}
}
void
ParseeEventHandler(const ParseeConfig *conf, HashMap *event)
{
char *event_type;
if (!conf || !event)
{
return;
}
Log(LOG_INFO, "Event by '%s', with type '%s'",
JsonValueAsString(HashMapGet(event, "sender")),
JsonValueAsString(HashMapGet(event, "type"))
);
event_type = GrabString(event, 1, "type");
if (StrEquals(event_type, "m.room.member"))
{
ParseeMemberHandler(conf, event);
return;
}
if (StrEquals(event_type, "m.room.message"))
{
ParseeMessageHandler(conf, event);
return;
}
}