mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 16:55:10 +00:00
[ADD/WIP] Push all the Janet changes
This is still unstable(and I still need to design/document the exposed API)! Do(n't) go and use it!
This commit is contained in:
parent
960599d983
commit
ca87972b3a
50 changed files with 3550 additions and 92 deletions
98
src/Extensions/StanzaInfo.c
Normal file
98
src/Extensions/StanzaInfo.c
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
#ifdef JANET
|
||||
|
||||
#include "Extensions/Internal.h"
|
||||
|
||||
Janet
|
||||
JanetStanzaInfo(int32_t argc, Janet *argv)
|
||||
{
|
||||
ParseeData *data;
|
||||
XMLElement *stanza;
|
||||
|
||||
JanetTable *ret;
|
||||
|
||||
char *trimmed = NULL;
|
||||
char *chat_id = NULL;
|
||||
char *from = NULL;
|
||||
char *room = NULL;
|
||||
char *mxid = NULL;
|
||||
|
||||
janet_fixarity(argc, 2);
|
||||
if (!(data = GetParseeData(argv[0])))
|
||||
{
|
||||
janet_signalv(JANET_SIGNAL_ERROR, janet_cstringv("CTX is not a ptr"));
|
||||
return janet_wrap_nil();
|
||||
}
|
||||
if (!janet_checktype(argv[1], JANET_TABLE))
|
||||
{
|
||||
janet_signalv(JANET_SIGNAL_ERROR, janet_cstringv("STANZA is not a table"));
|
||||
return janet_wrap_nil();
|
||||
}
|
||||
|
||||
if (!(stanza = ExtensionsToXML(janet_unwrap_table(argv[1]))))
|
||||
{
|
||||
janet_signalv(JANET_SIGNAL_ERROR, janet_cstringv("STANZA is not XML."));
|
||||
return janet_wrap_nil();
|
||||
}
|
||||
|
||||
from = HashMapGet(stanza->attrs, "from");
|
||||
trimmed = ParseeTrimJID(from);
|
||||
chat_id = ParseeGetFromMUCID(data, trimmed);
|
||||
|
||||
ret = janet_table(0);
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("in-muc"),
|
||||
janet_wrap_boolean(ParseeIsMUC(data, trimmed))
|
||||
);
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("in-dm"),
|
||||
janet_wrap_boolean(StrEquals(HashMapGet(stanza->attrs, "type"), "chat"))
|
||||
);
|
||||
if (chat_id && trimmed)
|
||||
{
|
||||
room = ParseeGetRoomID(data, chat_id);
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("muc-jid"), janet_cstringv(trimmed)
|
||||
);
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("id"), janet_cstringv(chat_id)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
char *to = ParseeDecodeMXID(HashMapGet(stanza->attrs, "to"));
|
||||
char *dmid = ParseeGetDMID(to, from);
|
||||
|
||||
room = ParseeFindDMRoom(data, to, from);
|
||||
if (dmid)
|
||||
{
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("id"), janet_cstringv(dmid)
|
||||
);
|
||||
}
|
||||
|
||||
Free(dmid);
|
||||
Free(to);
|
||||
}
|
||||
|
||||
if (room)
|
||||
{
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("room-id"), janet_cstringv(room)
|
||||
);
|
||||
}
|
||||
|
||||
if ((mxid = ParseeGetBridgedUser(data, stanza)))
|
||||
{
|
||||
janet_table_put(ret,
|
||||
janet_ckeywordv("bridged-sender"), janet_cstringv(mxid)
|
||||
);
|
||||
}
|
||||
|
||||
Free(trimmed);
|
||||
Free(chat_id);
|
||||
Free(room);
|
||||
Free(mxid);
|
||||
XMLFreeElement(stanza);
|
||||
return janet_wrap_table(ret);
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue