diff --git a/src/components/sendAttachmentsMixin.js b/src/components/sendAttachmentsMixin.js index 25b603b..395b1f6 100644 --- a/src/components/sendAttachmentsMixin.js +++ b/src/components/sendAttachmentsMixin.js @@ -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); + }); } },