[ADD/WIP] Try dealing in VCards

This commit is contained in:
LDA 2024-10-01 06:59:13 +02:00
commit 9ea8f35c49
3 changed files with 55 additions and 1 deletions

View file

@ -165,6 +165,20 @@ ParseeMemberHandler(ParseeData *data, HashMap *event)
ParseeBroadcastStanza(data, full_jid, elem); ParseeBroadcastStanza(data, full_jid, elem);
XMLFreeElement(elem); XMLFreeElement(elem);
elem = XMLCreateTag("presence");
{
XMLElement *x = XMLCreateTag("x");
XMLElement *photo;
XMLAddAttr(x, "xmlns", "vcard-temp:x:update");
photo = XMLCreateTag("photo");
XMLAddChild(photo, XMLCreateText(sha));
XMLAddChild(x, photo);
XMLAddChild(elem, x);
}
ParseeBroadcastStanza(data, full_jid, elem);
XMLFreeElement(elem);
Free(full_jid); Free(full_jid);
Free(avatar); Free(avatar);
Free(mime); Free(mime);

View file

@ -46,6 +46,42 @@ TrimBase64(char *b64)
return ret; return ret;
} }
XMLElement *
GenerateAvatarData(ParseeData *data, char *mxid)
{
char *mxc, *mime = NULL, *out = NULL, *b64 = NULL;
XMLElement *elem = NULL, *type, *binval;
size_t len = 0;
if (!data || !mxid)
{
return NULL;
}
mxc = ASGetAvatar(data->config, NULL, mxid);
if (!ASGrab(data->config, mxc, &mime, &out, &len))
{
goto end;
}
b64 = Base64Encode(out, len);
elem = XMLCreateTag("PHOTO");
type = XMLCreateTag("TYPE");
binval = XMLCreateTag("BINVAL");
XMLAddChild(type, XMLCreateText(mime));
XMLAddChild(binval, XMLCreateText(b64));
XMLAddChild(elem, type);
XMLAddChild(elem, binval);
end:
Free(mime);
Free(out);
Free(b64);
return elem;
}
#define DISCO "http://jabber.org/protocol/disco#info" #define DISCO "http://jabber.org/protocol/disco#info"
static XMLElement * static XMLElement *
IQGenerateQuery(void) IQGenerateQuery(void)
@ -425,6 +461,7 @@ IQGet(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
XMLAddChild(vCard, nick); XMLAddChild(vCard, nick);
XMLAddChild(vCard, url); XMLAddChild(vCard, url);
XMLAddChild(vCard, fn); XMLAddChild(vCard, fn);
XMLAddChild(vCard, GenerateAvatarData(args, to_matrix));
Free(mto_link); Free(mto_link);
} }
@ -435,6 +472,7 @@ IQGet(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
XMLEncode(jabber->stream, iqVCard); XMLEncode(jabber->stream, iqVCard);
StreamFlush(jabber->stream); StreamFlush(jabber->stream);
pthread_mutex_unlock(&jabber->write_lock); pthread_mutex_unlock(&jabber->write_lock);
XMLFreeElement(iqVCard);
Free(to_matrix); Free(to_matrix);
Free(name); Free(name);
} }

View file

@ -349,7 +349,9 @@ end_error:
* SENT TO NON-PARSEE PUPPETS, AS A "FIX" TO THE MULTITHREADED * SENT TO NON-PARSEE PUPPETS, AS A "FIX" TO THE MULTITHREADED
* ISSUE. * ISSUE.
* *
* I HATE THIS. I NEED TO FIND A BETTER WAY. */ * I HATE THIS. I NEED TO FIND A BETTER WAY.
*
* Actually, is it even _that_ bad? */
if (!chat && strncmp(HashMapGet(stanza->attrs, "to"), "parsee@", 7)) if (!chat && strncmp(HashMapGet(stanza->attrs, "to"), "parsee@", 7))
{ {
goto end; goto end;