mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 19:55:10 +00:00
[ADD/WIP] Try dealing in VCards
This commit is contained in:
parent
d989331716
commit
9ea8f35c49
3 changed files with 55 additions and 1 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue