Fix "cancel" when sending attachments

Make sure to redact all media messages sent, also correctly handle "abort" on the ones still uploading.
This commit is contained in:
N-Pex 2024-07-11 09:50:08 +02:00
parent 8c2fb7367e
commit 7951423de2

View file

@ -51,6 +51,7 @@ export default {
id: attachment.name,
status: this.sendStatuses.INITIAL,
statusDate: Date.now,
mediaEventId: undefined,
attachment: file,
preview: attachment.image,
progress: 0,
@ -74,6 +75,7 @@ export default {
if (item.status !== this.sendStatuses.INITIAL) {
return getItemPromise(++index);
}
item.status = this.sendStatuses.SENDING;
const itemPromise = util.sendFile(this.$matrix.matrixClient, this.room.roomId, item.attachment, ({ loaded, total }) => {
if (loaded == total) {
item.progress = 100;
@ -81,7 +83,7 @@ export default {
item.progress = 100 * loaded / total;
}
}, eventId)
.then(() => {
.then((mediaEventId) => {
// Look at last item rotation, flipping the sign on this, so looks more like a true stack
let signR = 1;
let signX = 1;
@ -100,6 +102,7 @@ export default {
item.randomRotation = signR * (2 + Math.random() * 10);
item.randomTranslationX = signX * Math.random() * 20;
item.randomTranslationY = signY * Math.random() * 20;
item.mediaEventId = mediaEventId;
item.status = this.sendStatuses.SENT;
item.statusDate = Date.now;
}).catch(ignorederr => {
@ -133,15 +136,17 @@ export default {
});
this.sendingStatus = this.sendStatuses.CANCELED;
if (this.sendingRootEventId && this.room) {
// Redact the root event.
this.$matrix.matrixClient
.redactEvent(this.room.roomId, this.sendingRootEventId, undefined, { reason: "cancel" })
.then(() => {
console.log("Message redacted");
})
.catch((err) => {
console.log("Redaction failed: ", err);
});
// Redact all media we already sent, plus the root event
let promises = this.sendingAttachments.filter((item) => item.mediaEventId !== undefined).map((item) => this.$matrix.matrixClient.redactEvent(this.room.roomId, item.mediaEventId, undefined, { reason: "cancel" }));
promises.push(this.$matrix.matrixClient.redactEvent(this.room.roomId, this.sendingRootEventId, undefined, { reason: "cancel" }));
Promise.allSettled(promises)
.then(() => {
console.log("Message redacted");
})
.catch((err) => {
console.log("Redaction failed: ", err);
});
}
},