From a48c3ba1266499fff045c2cc52aa529e133a0ef9 Mon Sep 17 00:00:00 2001 From: LDA Date: Tue, 8 Oct 2024 17:27:25 +0200 Subject: [PATCH] [ADD] Have avatars on first-message too --- src/AS/Profile.c | 1 - src/MatrixEventHandler.c | 18 +++++++++++++----- src/XML/Parser.c | 8 ++++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/AS/Profile.c b/src/AS/Profile.c index f536300..1f1a0da 100644 --- a/src/AS/Profile.c +++ b/src/AS/Profile.c @@ -195,7 +195,6 @@ ASGetAvatar(const ParseeConfig *c, char *room, char *user) ret = StrDuplicate( JsonValueAsString(HashMapGet(reply, "avatar_url")) ); - StreamFlush(StreamStderr()); HttpClientContextFree(ctx); JsonFree(reply); Free(path); diff --git a/src/MatrixEventHandler.c b/src/MatrixEventHandler.c index cb86427..8fec7ca 100644 --- a/src/MatrixEventHandler.c +++ b/src/MatrixEventHandler.c @@ -103,7 +103,7 @@ ParseeMemberHandler(ParseeData *data, HashMap *event) { char *jid = ParseeEncodeMXID(state_key); char *sha = NULL, *mime = NULL; - char *avatar = ASGetAvatar(data->config, room_id, state_key); + char *avatar = ASGetAvatar(data->config, NULL, state_key); char *url = ParseeToUnauth(data, avatar); chat_id = ParseeGetFromRoomID(data, room_id); @@ -115,7 +115,7 @@ ParseeMemberHandler(ParseeData *data, HashMap *event) char *muc = ParseeGetMUCID(data, chat_id); char *name = ASGetName(data->config, room_id, state_key); char *jabber = JoinMUC(data, event, jid, muc, name, sha); - avatar = ASGetAvatar(data->config, room_id, state_key); + avatar = ASGetAvatar(data->config, NULL, state_key); Log(LOG_DEBUG, "MATRIX: Joining as '%s' (avatar=%s)", jabber, avatar); Free(jabber); @@ -333,7 +333,8 @@ GetXMPPInformation(ParseeData *data, HashMap *event, char **from, char **to) } else { - char *matrix_name; + char *matrix_name, *matrix_avatar; + char *mime, *sha; muc_id = ParseeGetMUCID(data, chat_id); if (!chat_id) @@ -347,10 +348,16 @@ GetXMPPInformation(ParseeData *data, HashMap *event, char **from, char **to) } matrix_name = ASGetName(data->config, room_id, matrix_sender); - Free(JoinMUC(data, event, *from, muc_id, matrix_name, NULL)); + matrix_avatar = ASGetAvatar(data->config, NULL, matrix_sender); + + ASGetMIMESHA(data->config, matrix_avatar, &mime, &sha); + Free(JoinMUC(data, event, *from, muc_id, matrix_name, sha)); *to = muc_id; + Free(matrix_avatar); Free(matrix_name); + Free(mime); + Free(sha); } Free(chat_id); @@ -437,8 +444,9 @@ ParseeMessageHandler(ParseeData *data, HashMap *event) /* TODO: Avoid using the AS endpoints */ name = ASGetName(data->config, id, m_sender); - avatar = ASGetAvatar(data->config, id, sender); + avatar = ASGetAvatar(data->config, NULL, m_sender); ASGetMIMESHA(data->config, avatar, &mime, &sha); + Free(JoinMUC(data, event, encoded_from, muc_id, name, sha)); to = muc_id; diff --git a/src/XML/Parser.c b/src/XML/Parser.c index 1b8d30a..359e637 100644 --- a/src/XML/Parser.c +++ b/src/XML/Parser.c @@ -116,6 +116,11 @@ XMLEncodeString(Stream *stream, char *data) { size_t i; + if (!stream || !data) + { + return; + } + for (i = 0; i < strlen(data); i++) { char c = data[i]; @@ -145,6 +150,9 @@ XMLEncodeString(Stream *stream, char *data) continue; } StreamPrintf(stream, "%c", c); + /* TODO: Maybe consider Unistrings and encode arbitrary Unicode + * codepoints * with special XML. Oughta make it printable, you know? + */ } } void