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 @@
lock
- {{$t('purge_room.title')}}
+ {{ $t("purge_room.title") }}
- {{$t('purge_room.info')}}
+ {{ $t("purge_room.info") }}
+
+
+ {{ status }}
@@ -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);
});
})