From d00d43900191bedaed638ceaac130ff8c57118f2 Mon Sep 17 00:00:00 2001 From: N Pex Date: Thu, 8 Jun 2023 13:25:02 +0000 Subject: [PATCH] Move kick/ban detection to Chat.vue --- src/assets/translations/en.json | 3 ++- src/components/Chat.vue | 15 ++++++++++++++- src/components/Join.vue | 5 +++-- src/services/matrix.service.js | 24 +----------------------- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/src/assets/translations/en.json b/src/assets/translations/en.json index 3e86316..04b5939 100644 --- a/src/assets/translations/en.json +++ b/src/assets/translations/en.json @@ -213,7 +213,8 @@ "status_logging_in": "Logging in...", "status_joining": "Joining room...", "join_failed": "Failed to join room.", - "choose_name": "Choose a name to use" + "choose_name": "Choose a name to use", + "you_have_been_banned": "You have been banned from this room." }, "invite": { "title": "Add Friends", diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 2353475..bfb8ade 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -932,7 +932,20 @@ export default { scrollToSeeNew = true; } this.handleScrolledToBottom(scrollToSeeNew); - } + + // If kick or ban event, redirect to "goodbye"... + if (event.getType() === "m.room.member" && + event.getStateKey() == this.$matrix.currentUserId && + (event.getPrevContent() || {}).membership == "join" && + ( + (event.getContent().membership == "leave" && event.getSender() != this.currentUserId) || + (event.getContent().membership == "ban" )) + ) { + this.$store.commit("setCurrentRoomId", null); + const wasPurged = event.getContent().reason == "Room Deleted"; + this.$navigation.push({ name: "Goodbye", params: { roomWasPurged: wasPurged } }, -1); + } + } }, onUserTyping(event, member) { diff --git a/src/components/Join.vue b/src/components/Join.vue index e796b27..e98f317 100644 --- a/src/components/Join.vue +++ b/src/components/Join.vue @@ -82,14 +82,15 @@ - {{ + {{ roomId && roomId.startsWith("@") ? $t("join.enter_room_user") : $t("join.enter_room") }} - {{ + {{ roomId && roomId.startsWith("@") ? $t("join.join_user") : $t("join.join") }}
{{ loadingMessage }}
+
{{ $t("join.you_have_been_banned") }}
diff --git a/src/services/matrix.service.js b/src/services/matrix.service.js index 08bc79c..2b80c10 100644 --- a/src/services/matrix.service.js +++ b/src/services/matrix.service.js @@ -369,29 +369,7 @@ export default { } break; - case "m.room.member": - { - if (this.currentRoom && event.getRoomId() == this.currentRoom.roomId) { - // Don't use this.currentRoomId, may be an alias. We need the real id! - if ( - (event.getContent().membership == "leave" && - (event.getPrevContent() || {}).membership == "join" && - event.getStateKey() == this.currentUserId && - event.getSender() != this.currentUserId) || - (event.getContent().membership == "ban" && event.getStateKey() == this.currentUserId) - ) { - // We were kicked or banned - // If this is a live event (not just backpaging) then redirect to goodbye! - if (this.matrixClientReady) { - const wasPurged = event.getContent().reason == "Room Deleted"; - this.$navigation.push({ name: "Goodbye", params: { roomWasPurged: wasPurged } }, -1); - } - } - } - } - break; - - case "m.room.power_levels": + case "m.room.power_levels": { if (this.currentRoom && event.getRoomId() == this.currentRoom.roomId) { this.currentRoomIsReadOnlyForUser = this.isReadOnlyRoomForUser(event.getRoomId(), this.currentUserId);