From 8f227c2994aef9f76afc22b9980f313e94058287 Mon Sep 17 00:00:00 2001 From: N-Pex Date: Fri, 28 Jun 2024 11:49:55 +0200 Subject: [PATCH] More fixes for servers without m.thread-support Also, always retry loading timeline without "initialEventId" if first attempt fails (previously we did it only for M_UNKNOWN errors) --- src/components/Chat.vue | 11 ++++++----- src/components/messages/MessageIncomingThread.vue | 4 ++-- src/components/messages/MessageOutgoingThread.vue | 4 ++-- .../messages/export/MessageIncomingThreadExport.vue | 4 ++-- .../messages/export/MessageOutgoingThreadExport.vue | 4 ++-- src/plugins/utils.js | 7 ++++++- 6 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 16c6f07..2ebc7de 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -115,7 +115,7 @@
{{ replyToEvent.getContent().body | latestReply }}
-
{{ replyToThreadMessage }}
+
{{ replyToThreadMessage }}
{{ $t("message.reply_image") }}
{{ $t("message.reply_audio_message") }}
{{ $t("message.reply_video") }}
@@ -1027,7 +1027,7 @@ export default { }) .catch((err) => { console.log("Error fetching events!", err, this); - if (err.errcode == "M_UNKNOWN" && initialEventId) { + if (initialEventId) { // Try again without initial event! this.onRoomJoined(null); } else { @@ -1175,7 +1175,8 @@ export default { Vue.set(event, "parentThread", parentEvent); } else { // Try to load from server. - this.$matrix.matrixClient.getEventTimeline(this.timelineSet, event.threadRootId).then((tl) => { + this.$matrix.matrixClient.getEventTimeline(this.timelineSet, event.threadRootId) + .then((tl) => { if (tl) { const parentEvent = tl.getEvents().find((e) => e.getId() === event.threadRootId); if (parentEvent) { @@ -1197,7 +1198,7 @@ export default { } } } - }); + }).catch(e => console.error(e)); } }, @@ -1618,7 +1619,7 @@ export default { this.replyToEvent = event; this.$refs.messageInput.focus(); if (event.parentThread || event.isThreadRoot || event.isMxThread) { - this.replyToContentType = 'm.thread'; + this.replyToContentType = util.threadMessageType(); } else { this.replyToContentType = event.getContent().msgtype || 'm.poll'; } diff --git a/src/components/messages/MessageIncomingThread.vue b/src/components/messages/MessageIncomingThread.vue index 2bab13b..32ede10 100644 --- a/src/components/messages/MessageIncomingThread.vue +++ b/src/components/messages/MessageIncomingThread.vue @@ -53,7 +53,7 @@ export default { } }, mounted() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); if (!this.thread) { this.event.on("Event.relationsCreated", this.onRelationsCreated); } @@ -63,7 +63,7 @@ export default { }, methods: { onRelationsCreated() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); this.event.off("Event.relationsCreated", this.onRelationsCreated); }, onItemClick(event) { diff --git a/src/components/messages/MessageOutgoingThread.vue b/src/components/messages/MessageOutgoingThread.vue index d3047d3..7cdb536 100644 --- a/src/components/messages/MessageOutgoingThread.vue +++ b/src/components/messages/MessageOutgoingThread.vue @@ -54,7 +54,7 @@ export default { } }, mounted() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); if (!this.thread) { this.event.on("Event.relationsCreated", this.onRelationsCreated); } @@ -64,7 +64,7 @@ export default { }, methods: { onRelationsCreated() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); this.event.off("Event.relationsCreated", this.onRelationsCreated); }, onItemClick(event) { diff --git a/src/components/messages/export/MessageIncomingThreadExport.vue b/src/components/messages/export/MessageIncomingThreadExport.vue index 5756683..a527dd2 100644 --- a/src/components/messages/export/MessageIncomingThreadExport.vue +++ b/src/components/messages/export/MessageIncomingThreadExport.vue @@ -20,7 +20,7 @@ export default { } }, mounted() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); if (!this.thread) { this.event.on("Event.relationsCreated", this.onRelationsCreated); } @@ -30,7 +30,7 @@ export default { }, methods: { onRelationsCreated() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); this.event.off("Event.relationsCreated", this.onRelationsCreated); }, processThread() { diff --git a/src/components/messages/export/MessageOutgoingThreadExport.vue b/src/components/messages/export/MessageOutgoingThreadExport.vue index a746cbe..108e5cf 100644 --- a/src/components/messages/export/MessageOutgoingThreadExport.vue +++ b/src/components/messages/export/MessageOutgoingThreadExport.vue @@ -20,7 +20,7 @@ export default { } }, mounted() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); if (!this.thread) { this.event.on("Event.relationsCreated", this.onRelationsCreated); } @@ -30,7 +30,7 @@ export default { }, methods: { onRelationsCreated() { - this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), "m.thread", "m.room.message"); + this.thread = this.timelineSet.relations.getChildEventsForEvent(this.event.getId(), util.threadMessageType(), "m.room.message"); this.event.off("Event.relationsCreated", this.onRelationsCreated); }, processThread() { diff --git a/src/plugins/utils.js b/src/plugins/utils.js index a4158c1..7a4b64a 100644 --- a/src/plugins/utils.js +++ b/src/plugins/utils.js @@ -68,6 +68,11 @@ class UploadPromise { } class Util { + + threadMessageType() { + return Thread.hasServerSideSupport ? "m.thread" : "io.element.thread" + } + getAttachmentUrlAndDuration(event) { return new Promise((resolve, reject) => { const content = event.getContent(); @@ -400,7 +405,7 @@ class Util { // If thread root (an eventId) is set, add that here if (threadRoot) { messageContent["m.relates_to"] = { - "rel_type": Thread.hasServerSideSupport ? "m.thread" : "io.element.thread", + "rel_type": this.threadMessageType(), "event_id": threadRoot }; }