diff options
author | Michael Vetter <jubalh@iodoru.org> | 2019-08-21 08:11:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-21 08:11:27 +0200 |
commit | 75c13d492225d51d6594ace508bad33cd26ff293 (patch) | |
tree | e31984a71af8924cfe7b1c2d2983981370f275ba | |
parent | 1e873e1f4073b71c83c26adddd4a10c8c83ff8f4 (diff) | |
parent | 3228ab47d341f477aad7a03093807d4324ec9f68 (diff) | |
download | profani-tty-75c13d492225d51d6594ace508bad33cd26ff293.tar.gz |
Merge pull request #1174 from weiss/check-muc-delay
Don't render (all) delayed messages as MUC history
-rw-r--r-- | src/xmpp/message.c | 6 | ||||
-rw-r--r-- | src/xmpp/stanza.c | 15 | ||||
-rw-r--r-- | src/xmpp/stanza.h | 1 |
3 files changed, 20 insertions, 2 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c index fd2b8e51..033a7a11 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -821,12 +821,14 @@ _handle_groupchat(xmpp_stanza_t *const stanza) } // determine if the notifications happened whilst offline - message->timestamp = stanza_get_delay(stanza); - if (message->timestamp) { + gchar *from; + message->timestamp = stanza_get_delay_from(stanza, &from); + if (message->timestamp && g_strcmp0(jid->barejid, from) == 0) { sv_ev_room_history(message); } else { sv_ev_room_message(message); } + g_free(from); out: message_free(message); diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index 2801ab53..a63cfef3 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -1174,6 +1174,12 @@ stanza_create_caps_sha1_from_query(xmpp_stanza_t *const query) GDateTime* stanza_get_delay(xmpp_stanza_t *const stanza) { + return stanza_get_delay_from(stanza, NULL); +} + +GDateTime* +stanza_get_delay_from(xmpp_stanza_t *const stanza, gchar **from) +{ GTimeVal utc_stamp; // first check for XEP-0203 delayed delivery xmpp_stanza_t *delay = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_DELAY); @@ -1185,6 +1191,9 @@ stanza_get_delay(xmpp_stanza_t *const stanza) GDateTime *utc_datetime = g_date_time_new_from_timeval_utc(&utc_stamp); GDateTime *local_datetime = g_date_time_to_local(utc_datetime); g_date_time_unref(utc_datetime); + if (from) { + *from = g_strdup(xmpp_stanza_get_attribute(delay, STANZA_ATTR_FROM)); + } return local_datetime; } } @@ -1201,11 +1210,17 @@ stanza_get_delay(xmpp_stanza_t *const stanza) GDateTime *utc_datetime = g_date_time_new_from_timeval_utc(&utc_stamp); GDateTime *local_datetime = g_date_time_to_local(utc_datetime); g_date_time_unref(utc_datetime); + if (from) { + *from = g_strdup(xmpp_stanza_get_attribute(x, STANZA_ATTR_FROM)); + } return local_datetime; } } } + if (from) { + *from = NULL; + } return NULL; } diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index e5e17ba4..ad83d694 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -267,6 +267,7 @@ xmpp_stanza_t* stanza_create_mediated_invite(xmpp_ctx_t *ctx, const char *const gboolean stanza_contains_chat_state(xmpp_stanza_t *stanza); GDateTime* stanza_get_delay(xmpp_stanza_t *const stanza); +GDateTime* stanza_get_delay_from(xmpp_stanza_t *const stanza, gchar **from); gboolean stanza_is_muc_presence(xmpp_stanza_t *const stanza); gboolean stanza_is_muc_self_presence(xmpp_stanza_t *const stanza, |