From 86f03c0fc2fdf3ee78defdaaaae6a444db73458f Mon Sep 17 00:00:00 2001 From: N-Pex Date: Thu, 27 May 2021 13:38:57 +0200 Subject: [PATCH] Purge room work For issue #118. Now with better status and error. Also, make sure to set global flag "no warning for unknown devices" while we are redacting events. --- src/assets/translations/en.json | 12 ++++++++++-- src/components/PurgeRoomDialog.vue | 26 +++++++++++++++++++++----- src/main.js | 2 +- src/services/matrix.service.js | 14 ++++++++++++-- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/assets/translations/en.json b/src/assets/translations/en.json index e47c8a6..0bbcda2 100644 --- a/src/assets/translations/en.json +++ b/src/assets/translations/en.json @@ -48,11 +48,19 @@ "user_is_typing": "{user} is typing", "users_are_typing": "{count} members are typing", "room_powerlevel_change": "{user} changed powerlevel of {changes}", - "user_powerlevel_change_from_to": "{user} from {powerOld} to {powerNew}" + "user_powerlevel_change_from_to": "{user} from {powerOld} to {powerNew}", + "user_changed_guest_access_closed": "{user} disallowed guests to join the room", + "user_changed_guest_access_open": "{user} allowed guests to join the room" }, "room": { "members": "no members | 1 member | {count} members", - "leave": "Leave" + "leave": "Leave", + "purge_set_room_state": "Setting room state", + "purge_redacting_events": "Redacting events", + "purge_removing_members": "Removing members", + "purge_failed": "Failed to purge room!", + "room_list_invites": "Invites", + "room_list_rooms": "Rooms" }, "room_welcome": { "welcome": "Welcome!", diff --git a/src/components/PurgeRoomDialog.vue b/src/components/PurgeRoomDialog.vue index 37aa355..f76a766 100644 --- a/src/components/PurgeRoomDialog.vue +++ b/src/components/PurgeRoomDialog.vue @@ -3,9 +3,12 @@
@@ -16,8 +19,9 @@ text block class="text-button" + :disabled="isPurging" @click="showDialog = false" - >{{$t('menu.cancel')}}{{ $t("menu.cancel") }} @@ -26,8 +30,9 @@ depressed block class="filled-button" + :disabled="isPurging" @click.stop="onPurgeRoom()" - >{{$t('purge_room.button')}}{{ $t("purge_room.button") }} @@ -52,6 +57,8 @@ export default { data() { return { showDialog: false, + isPurging: false, + status: null, }; }, watch: { @@ -69,8 +76,9 @@ export default { methods: { onPurgeRoom() { + this.isPurging = true; this.$matrix - .purgeRoom(this.room.roomId) + .purgeRoom(this.room.roomId, this.onPurgeStatus) .then(() => { this.showDialog = false; console.log("Purged room"); @@ -78,8 +86,16 @@ export default { }) .catch((err) => { console.error("Error purging", err); + this.status = this.$t("room.purge_failed"); + }) + .finally(() => { + this.isPurging = false; }); }, + + onPurgeStatus(message) { + this.status = message; + }, }, }; diff --git a/src/main.js b/src/main.js index 9b17b0e..d7570e7 100644 --- a/src/main.js +++ b/src/main.js @@ -24,7 +24,7 @@ Vue.config.productionTip = false Vue.use(VueResize); Vue.use(VEmojiPicker); -Vue.use(matrix, { store: store }); +Vue.use(matrix, { store: store, i18n: i18n }); Vue.use(cleaninsights); Vue.use(VueClipboard); diff --git a/src/services/matrix.service.js b/src/services/matrix.service.js index 9f26ecf..440c71b 100644 --- a/src/services/matrix.service.js +++ b/src/services/matrix.service.js @@ -15,10 +15,11 @@ export default { } const store = options.store; + const i18n = options.i18n; const matrixService = new Vue({ store, - + i18n, data() { return { matrixClient: null, @@ -471,7 +472,8 @@ export default { * - Kick all members * @param roomId */ - purgeRoom(roomId) { + purgeRoom(roomId, statusCallback) { + const oldGlobalErrorSetting = this.matrixClient.getGlobalErrorOnUnknownDevices(); return new Promise((resolve, reject) => { const room = this.getRoom(roomId); if (!room) { @@ -487,6 +489,7 @@ export default { const self = this; console.log("Purge: set invite only"); + statusCallback(this.$t('room.purge_set_room_state')); this.matrixClient.sendStateEvent( roomId, "m.room.join_rules", @@ -530,6 +533,9 @@ export default { }) .then(() => { console.log("Purge: redact events"); + statusCallback(this.$t('room.purge_redacting_events')); + // First ignore unknown device errors + this.matrixClient.setGlobalErrorOnUnknownDevices(false); var redactionPromises = []; timelineWindow.getEvents().forEach(event => { if (!event.isRedacted() && !event.isRedaction() && !event.isState()) { @@ -541,6 +547,7 @@ export default { }) .then(() => { console.log("Purge: kick members"); + statusCallback(this.$t('room.purge_removing_members')); var joined = room.getMembersWithMembership("join"); var invited = room.getMembersWithMembership("invite"); var members = joined.concat(invited); @@ -554,10 +561,13 @@ export default { return Promise.all(kickPromises); }) .then(() => { + statusCallback(null); + this.matrixClient.setGlobalErrorOnUnknownDevices(oldGlobalErrorSetting); resolve(true); // Done! }) .catch((err) => { console.error("Error purging room", err); + this.matrixClient.setGlobalErrorOnUnknownDevices(oldGlobalErrorSetting); reject(err); }); })