From 48cb13c82b7aca931919fd0de2655f01b264fec9 Mon Sep 17 00:00:00 2001 From: N Pex Date: Tue, 1 Aug 2023 10:14:10 +0000 Subject: [PATCH] Resolve "(File Drop Mode) : File sent from the user in file drop mode is not received by another user" --- src/assets/css/filedrop.scss | 5 ++++ src/assets/translations/en.json | 3 ++- src/assets/translations/pt_BR.json | 1 - src/components/LeaveRoomDialog.vue | 14 +---------- src/components/chatMixin.js | 2 +- src/components/file_mode/FileDropLayout.vue | 9 ++++++- src/components/messages/messageMixin.js | 27 ++++++++++++++++++++- src/services/matrix.service.js | 25 +++++++++++++++++++ 8 files changed, 68 insertions(+), 18 deletions(-) diff --git a/src/assets/css/filedrop.scss b/src/assets/css/filedrop.scss index fdd6f04..f4cccd1 100644 --- a/src/assets/css/filedrop.scss +++ b/src/assets/css/filedrop.scss @@ -355,6 +355,11 @@ $small-button-height: 36px; right: unset; left: 8px; background: linear-gradient(0deg, #000 0%, #000 100%), #4642f1; + &.close { + right: 8px; + left: unset; + background: $hiliteColor !important; + } } } } diff --git a/src/assets/translations/en.json b/src/assets/translations/en.json index e857f09..19fd4cb 100644 --- a/src/assets/translations/en.json +++ b/src/assets/translations/en.json @@ -386,7 +386,8 @@ "sending": "Sending", "files_sent":"1 file sent! | {count} files sent!", "files_sent_with_note":"1 file sent with a note! | {count} files sent with a note!", - "return_to_home": "Return to home", + "send_more_files": "Send more files", + "close": "Close", "files": "Files" } } diff --git a/src/assets/translations/pt_BR.json b/src/assets/translations/pt_BR.json index 9c69c3e..5bef028 100644 --- a/src/assets/translations/pt_BR.json +++ b/src/assets/translations/pt_BR.json @@ -372,7 +372,6 @@ "sending_progress": "Enviando...", "files_sent": "1 arquivo enviado! | {count} arquivos enviados!", "files_sent_with_note": "1 arquivo enviado com uma nota! | {count} arquivos enviados com uma nota!", - "return_to_home": "Retornar ao início", "add_a_message": "Adicionar uma mensagem", "sending": "Enviando", "any_file_format_accepted": "Qualquer formato de arquivo é aceito", diff --git a/src/components/LeaveRoomDialog.vue b/src/components/LeaveRoomDialog.vue index 8c53481..f75052d 100644 --- a/src/components/LeaveRoomDialog.vue +++ b/src/components/LeaveRoomDialog.vue @@ -117,22 +117,10 @@ export default { }, onLeaveRoom() { - const lastRoom = this.onlyJoinedToThisRoom(); - //this.$matrix.matrixClient.forget(this.room.roomId, true, undefined) - const roomId = this.room.roomId; - this.$matrix - .leaveRoom(roomId) + this.$matrix.leaveRoomAndNavigate(this.room.roomId) .then(() => { this.showDialog = false; console.log("Left room"); - if (lastRoom) { - this.$navigation.push({ name: "Goodbye" }, -1); - } else { - this.$navigation.push( - { name: "Home", params: { roomId: null } }, - -1 - ); - } }) .catch((err) => { console.log("Error leaving", err); diff --git a/src/components/chatMixin.js b/src/components/chatMixin.js index 7d61e67..a2949bb 100644 --- a/src/components/chatMixin.js +++ b/src/components/chatMixin.js @@ -154,7 +154,7 @@ export default { case "m.room.message": if (event.getSender() != this.$matrix.currentUserId) { - if (event.isThreadRoot) { + if (event.isThreadRoot || event.isThread) { // Incoming thread, e.g. a file drop! return MessageIncomingThread; } diff --git a/src/components/file_mode/FileDropLayout.vue b/src/components/file_mode/FileDropLayout.vue index 039a1ca..a1b7d12 100644 --- a/src/components/file_mode/FileDropLayout.vue +++ b/src/components/file_mode/FileDropLayout.vue @@ -95,7 +95,8 @@ color="#4642F1">
- {{ $t("file_mode.return_to_home") }} + {{ $t("file_mode.send_more_files") }} + {{ $t("file_mode.close") }}
@@ -211,6 +212,12 @@ export default { this.messageInput = ""; this.currentItemIndex = 0; }, + close() { + this.$matrix.leaveRoomAndNavigate(this.room.roomId) + .catch((err) => { + console.log("Error leaving", err); + }); + }, send() { this.status = this.mainStatuses.SENDING; this.sendInfo = this.attachments.map((attachment) => { diff --git a/src/components/messages/messageMixin.js b/src/components/messages/messageMixin.js index 1e93cf5..1c22563 100644 --- a/src/components/messages/messageMixin.js +++ b/src/components/messages/messageMixin.js @@ -2,6 +2,7 @@ import QuickReactions from "./QuickReactions.vue"; import * as linkify from 'linkifyjs'; import linkifyHtml from 'linkify-html'; import utils from "../../plugins/utils" +import Vue from "vue"; linkify.options.defaults.className = "link"; linkify.options.defaults.target = { url: "_blank" }; @@ -58,7 +59,26 @@ export default { } } }, + beforeUnmount() { + if (this.validEvent) { + this.event.off("Event.relationsCreated", this.onRelationsCreated); + } + }, watch: { + event: { + immediate: true, + handler(newValue, oldValue) { + if (oldValue && oldValue.getId) { + oldValue.off("Event.relationsCreated", this.onRelationsCreated); + } + if (newValue && newValue.getId) { + newValue.on("Event.relationsCreated", this.onRelationsCreated); + if (newValue.isThreadRoot) { + Vue.set(newValue, "isThread", true); + } + } + } + }, originalEvent: { immediate: true, handler(originalEvent, ignoredOldValue) { @@ -70,7 +90,7 @@ export default { }); } }, - }, + } }, computed: { /** @@ -164,6 +184,11 @@ export default { }, }, methods: { + onRelationsCreated(relationType, ignoredEventType) { + if (relationType === "m.thread") { + Vue.set(this.event, "isThread", true); + } + }, ownAvatarClicked() { this.$emit("own-avatar-clicked", { event: this.event }); }, diff --git a/src/services/matrix.service.js b/src/services/matrix.service.js index 2b80c10..44ddd1c 100644 --- a/src/services/matrix.service.js +++ b/src/services/matrix.service.js @@ -526,6 +526,31 @@ export default { }); }, + /** + * Leave the room, and if this is the last room we are in, navigate to the "goodbye" page. + * Otherwise, navigate to home. + * @param roomId + */ + leaveRoomAndNavigate(roomId) { + const joinedRooms = this.joinedRooms; + const isLastRoomWeAreJoinedTo = ( + joinedRooms && + joinedRooms.length == 1 && + joinedRooms[0].roomId == roomId + ); + return this.leaveRoom(roomId) + .then(() => { + if (isLastRoomWeAreJoinedTo) { + this.$navigation.push({ name: "Goodbye" }, -1); + } else { + this.$navigation.push( + { name: "Home", params: { roomId: null } }, + -1 + ); + } + }) + }, + kickUser(roomId, userId) { if (this.matrixClient && roomId && userId) { this.matrixClient.kick(roomId, userId, "");