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.
This commit is contained in:
parent
e9a1633083
commit
86f03c0fc2
4 changed files with 44 additions and 10 deletions
|
|
@ -48,11 +48,19 @@
|
||||||
"user_is_typing": "{user} is typing",
|
"user_is_typing": "{user} is typing",
|
||||||
"users_are_typing": "{count} members are typing",
|
"users_are_typing": "{count} members are typing",
|
||||||
"room_powerlevel_change": "{user} changed powerlevel of {changes}",
|
"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": {
|
"room": {
|
||||||
"members": "no members | 1 member | {count} members",
|
"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": {
|
"room_welcome": {
|
||||||
"welcome": "Welcome!",
|
"welcome": "Welcome!",
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,12 @@
|
||||||
<div class="dialog-content text-center">
|
<div class="dialog-content text-center">
|
||||||
<template>
|
<template>
|
||||||
<v-icon color="black" size="30">lock</v-icon>
|
<v-icon color="black" size="30">lock</v-icon>
|
||||||
<h2 class="dialog-title">{{$t('purge_room.title')}}</h2>
|
<h2 class="dialog-title">{{ $t("purge_room.title") }}</h2>
|
||||||
<div class="dialog-text">
|
<div class="dialog-text">
|
||||||
{{$t('purge_room.info')}}
|
{{ $t("purge_room.info") }}
|
||||||
|
</div>
|
||||||
|
<div class="dialog-text">
|
||||||
|
{{ status }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<v-container fluid>
|
<v-container fluid>
|
||||||
|
|
@ -16,8 +19,9 @@
|
||||||
text
|
text
|
||||||
block
|
block
|
||||||
class="text-button"
|
class="text-button"
|
||||||
|
:disabled="isPurging"
|
||||||
@click="showDialog = false"
|
@click="showDialog = false"
|
||||||
>{{$t('menu.cancel')}}</v-btn
|
>{{ $t("menu.cancel") }}</v-btn
|
||||||
>
|
>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="6" align="center">
|
<v-col cols="6" align="center">
|
||||||
|
|
@ -26,8 +30,9 @@
|
||||||
depressed
|
depressed
|
||||||
block
|
block
|
||||||
class="filled-button"
|
class="filled-button"
|
||||||
|
:disabled="isPurging"
|
||||||
@click.stop="onPurgeRoom()"
|
@click.stop="onPurgeRoom()"
|
||||||
>{{$t('purge_room.button')}}</v-btn
|
>{{ $t("purge_room.button") }}</v-btn
|
||||||
>
|
>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
@ -52,6 +57,8 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showDialog: false,
|
showDialog: false,
|
||||||
|
isPurging: false,
|
||||||
|
status: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
@ -69,8 +76,9 @@ export default {
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
onPurgeRoom() {
|
onPurgeRoom() {
|
||||||
|
this.isPurging = true;
|
||||||
this.$matrix
|
this.$matrix
|
||||||
.purgeRoom(this.room.roomId)
|
.purgeRoom(this.room.roomId, this.onPurgeStatus)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.showDialog = false;
|
this.showDialog = false;
|
||||||
console.log("Purged room");
|
console.log("Purged room");
|
||||||
|
|
@ -78,8 +86,16 @@ export default {
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error("Error purging", err);
|
console.error("Error purging", err);
|
||||||
|
this.status = this.$t("room.purge_failed");
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.isPurging = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onPurgeStatus(message) {
|
||||||
|
this.status = message;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ Vue.config.productionTip = false
|
||||||
|
|
||||||
Vue.use(VueResize);
|
Vue.use(VueResize);
|
||||||
Vue.use(VEmojiPicker);
|
Vue.use(VEmojiPicker);
|
||||||
Vue.use(matrix, { store: store });
|
Vue.use(matrix, { store: store, i18n: i18n });
|
||||||
Vue.use(cleaninsights);
|
Vue.use(cleaninsights);
|
||||||
Vue.use(VueClipboard);
|
Vue.use(VueClipboard);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,11 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
const store = options.store;
|
const store = options.store;
|
||||||
|
const i18n = options.i18n;
|
||||||
|
|
||||||
const matrixService = new Vue({
|
const matrixService = new Vue({
|
||||||
store,
|
store,
|
||||||
|
i18n,
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
matrixClient: null,
|
matrixClient: null,
|
||||||
|
|
@ -471,7 +472,8 @@ export default {
|
||||||
* - Kick all members
|
* - Kick all members
|
||||||
* @param roomId
|
* @param roomId
|
||||||
*/
|
*/
|
||||||
purgeRoom(roomId) {
|
purgeRoom(roomId, statusCallback) {
|
||||||
|
const oldGlobalErrorSetting = this.matrixClient.getGlobalErrorOnUnknownDevices();
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const room = this.getRoom(roomId);
|
const room = this.getRoom(roomId);
|
||||||
if (!room) {
|
if (!room) {
|
||||||
|
|
@ -487,6 +489,7 @@ export default {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
console.log("Purge: set invite only");
|
console.log("Purge: set invite only");
|
||||||
|
statusCallback(this.$t('room.purge_set_room_state'));
|
||||||
this.matrixClient.sendStateEvent(
|
this.matrixClient.sendStateEvent(
|
||||||
roomId,
|
roomId,
|
||||||
"m.room.join_rules",
|
"m.room.join_rules",
|
||||||
|
|
@ -530,6 +533,9 @@ export default {
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log("Purge: redact events");
|
console.log("Purge: redact events");
|
||||||
|
statusCallback(this.$t('room.purge_redacting_events'));
|
||||||
|
// First ignore unknown device errors
|
||||||
|
this.matrixClient.setGlobalErrorOnUnknownDevices(false);
|
||||||
var redactionPromises = [];
|
var redactionPromises = [];
|
||||||
timelineWindow.getEvents().forEach(event => {
|
timelineWindow.getEvents().forEach(event => {
|
||||||
if (!event.isRedacted() && !event.isRedaction() && !event.isState()) {
|
if (!event.isRedacted() && !event.isRedaction() && !event.isState()) {
|
||||||
|
|
@ -541,6 +547,7 @@ export default {
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log("Purge: kick members");
|
console.log("Purge: kick members");
|
||||||
|
statusCallback(this.$t('room.purge_removing_members'));
|
||||||
var joined = room.getMembersWithMembership("join");
|
var joined = room.getMembersWithMembership("join");
|
||||||
var invited = room.getMembersWithMembership("invite");
|
var invited = room.getMembersWithMembership("invite");
|
||||||
var members = joined.concat(invited);
|
var members = joined.concat(invited);
|
||||||
|
|
@ -554,10 +561,13 @@ export default {
|
||||||
return Promise.all(kickPromises);
|
return Promise.all(kickPromises);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
statusCallback(null);
|
||||||
|
this.matrixClient.setGlobalErrorOnUnknownDevices(oldGlobalErrorSetting);
|
||||||
resolve(true); // Done!
|
resolve(true); // Done!
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error("Error purging room", err);
|
console.error("Error purging room", err);
|
||||||
|
this.matrixClient.setGlobalErrorOnUnknownDevices(oldGlobalErrorSetting);
|
||||||
reject(err);
|
reject(err);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue