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)
This commit is contained in:
N-Pex 2024-06-28 11:49:55 +02:00
parent ecb4b1717b
commit 8f227c2994
6 changed files with 20 additions and 14 deletions

View file

@ -115,7 +115,7 @@
<div v-if="replyToContentType === 'm.text'" class="reply-text" :title="replyToEvent.getContent().body"> <div v-if="replyToContentType === 'm.text'" class="reply-text" :title="replyToEvent.getContent().body">
{{ replyToEvent.getContent().body | latestReply }} {{ replyToEvent.getContent().body | latestReply }}
</div> </div>
<div v-if="replyToContentType === 'm.thread'">{{ replyToThreadMessage }}</div> <div v-if="replyToContentType === 'm.thread' || replyToContentType === 'io.element.thread'">{{ replyToThreadMessage }}</div>
<div v-if="replyToContentType === 'm.image'">{{ $t("message.reply_image") }}</div> <div v-if="replyToContentType === 'm.image'">{{ $t("message.reply_image") }}</div>
<div v-if="replyToContentType === 'm.audio'">{{ $t("message.reply_audio_message") }}</div> <div v-if="replyToContentType === 'm.audio'">{{ $t("message.reply_audio_message") }}</div>
<div v-if="replyToContentType === 'm.video'">{{ $t("message.reply_video") }}</div> <div v-if="replyToContentType === 'm.video'">{{ $t("message.reply_video") }}</div>
@ -1027,7 +1027,7 @@ export default {
}) })
.catch((err) => { .catch((err) => {
console.log("Error fetching events!", err, this); console.log("Error fetching events!", err, this);
if (err.errcode == "M_UNKNOWN" && initialEventId) { if (initialEventId) {
// Try again without initial event! // Try again without initial event!
this.onRoomJoined(null); this.onRoomJoined(null);
} else { } else {
@ -1175,7 +1175,8 @@ export default {
Vue.set(event, "parentThread", parentEvent); Vue.set(event, "parentThread", parentEvent);
} else { } else {
// Try to load from server. // 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) { if (tl) {
const parentEvent = tl.getEvents().find((e) => e.getId() === event.threadRootId); const parentEvent = tl.getEvents().find((e) => e.getId() === event.threadRootId);
if (parentEvent) { if (parentEvent) {
@ -1197,7 +1198,7 @@ export default {
} }
} }
} }
}); }).catch(e => console.error(e));
} }
}, },
@ -1618,7 +1619,7 @@ export default {
this.replyToEvent = event; this.replyToEvent = event;
this.$refs.messageInput.focus(); this.$refs.messageInput.focus();
if (event.parentThread || event.isThreadRoot || event.isMxThread) { if (event.parentThread || event.isThreadRoot || event.isMxThread) {
this.replyToContentType = 'm.thread'; this.replyToContentType = util.threadMessageType();
} else { } else {
this.replyToContentType = event.getContent().msgtype || 'm.poll'; this.replyToContentType = event.getContent().msgtype || 'm.poll';
} }

View file

@ -53,7 +53,7 @@ export default {
} }
}, },
mounted() { 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) { if (!this.thread) {
this.event.on("Event.relationsCreated", this.onRelationsCreated); this.event.on("Event.relationsCreated", this.onRelationsCreated);
} }
@ -63,7 +63,7 @@ export default {
}, },
methods: { methods: {
onRelationsCreated() { 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); this.event.off("Event.relationsCreated", this.onRelationsCreated);
}, },
onItemClick(event) { onItemClick(event) {

View file

@ -54,7 +54,7 @@ export default {
} }
}, },
mounted() { 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) { if (!this.thread) {
this.event.on("Event.relationsCreated", this.onRelationsCreated); this.event.on("Event.relationsCreated", this.onRelationsCreated);
} }
@ -64,7 +64,7 @@ export default {
}, },
methods: { methods: {
onRelationsCreated() { 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); this.event.off("Event.relationsCreated", this.onRelationsCreated);
}, },
onItemClick(event) { onItemClick(event) {

View file

@ -20,7 +20,7 @@ export default {
} }
}, },
mounted() { 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) { if (!this.thread) {
this.event.on("Event.relationsCreated", this.onRelationsCreated); this.event.on("Event.relationsCreated", this.onRelationsCreated);
} }
@ -30,7 +30,7 @@ export default {
}, },
methods: { methods: {
onRelationsCreated() { 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); this.event.off("Event.relationsCreated", this.onRelationsCreated);
}, },
processThread() { processThread() {

View file

@ -20,7 +20,7 @@ export default {
} }
}, },
mounted() { 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) { if (!this.thread) {
this.event.on("Event.relationsCreated", this.onRelationsCreated); this.event.on("Event.relationsCreated", this.onRelationsCreated);
} }
@ -30,7 +30,7 @@ export default {
}, },
methods: { methods: {
onRelationsCreated() { 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); this.event.off("Event.relationsCreated", this.onRelationsCreated);
}, },
processThread() { processThread() {

View file

@ -68,6 +68,11 @@ class UploadPromise {
} }
class Util { class Util {
threadMessageType() {
return Thread.hasServerSideSupport ? "m.thread" : "io.element.thread"
}
getAttachmentUrlAndDuration(event) { getAttachmentUrlAndDuration(event) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const content = event.getContent(); const content = event.getContent();
@ -400,7 +405,7 @@ class Util {
// If thread root (an eventId) is set, add that here // If thread root (an eventId) is set, add that here
if (threadRoot) { if (threadRoot) {
messageContent["m.relates_to"] = { messageContent["m.relates_to"] = {
"rel_type": Thread.hasServerSideSupport ? "m.thread" : "io.element.thread", "rel_type": this.threadMessageType(),
"event_id": threadRoot "event_id": threadRoot
}; };
} }