Merge branch '607-direct-message-deleted-room-still-shows-up-on-room-list-view' into 'dev'
Resolve "Direct message - deleted room still shows up on room list view" See merge request keanuapp/keanuapp-weblite!303
This commit is contained in:
commit
31b3ea38da
1 changed files with 26 additions and 4 deletions
|
|
@ -406,6 +406,17 @@ export default {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "m.room.join_rules":
|
||||||
|
{
|
||||||
|
const room = this.matrixClient.getRoom(event.getRoomId());
|
||||||
|
if (room && room.getJoinRule() == "private" && room.selfMembership == "invite") {
|
||||||
|
// We have an invite to a room that's now "private"? This is most probably a deleted DM room.
|
||||||
|
// Reject the invite, i.e. call "leave" on it.
|
||||||
|
this.matrixClient.leave(room.roomId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case STATE_EVENT_ROOM_DELETED:
|
case STATE_EVENT_ROOM_DELETED:
|
||||||
{
|
{
|
||||||
const room = this.matrixClient.getRoom(event.getRoomId());
|
const room = this.matrixClient.getRoom(event.getRoomId());
|
||||||
|
|
@ -494,7 +505,7 @@ export default {
|
||||||
// each time!
|
// each time!
|
||||||
var updatedRooms = this.matrixClient.getVisibleRooms();
|
var updatedRooms = this.matrixClient.getVisibleRooms();
|
||||||
updatedRooms = updatedRooms.filter((room) => {
|
updatedRooms = updatedRooms.filter((room) => {
|
||||||
return room.selfMembership && (room.selfMembership == "invite" || room.selfMembership == "join");
|
return room.selfMembership && (room.selfMembership == "invite" || room.selfMembership == "join") && room.currentState.getStateEvents(STATE_EVENT_ROOM_DELETED).length == 0;
|
||||||
});
|
});
|
||||||
updatedRooms.forEach((room) => {
|
updatedRooms.forEach((room) => {
|
||||||
if (!room.avatar) {
|
if (!room.avatar) {
|
||||||
|
|
@ -580,7 +591,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
leaveRoom(roomId) {
|
leaveRoom(roomId) {
|
||||||
return this.matrixClient.leave(roomId, undefined).then(() => {
|
return this.matrixClient.leave(roomId).then(() => {
|
||||||
this.$store.commit("setCurrentRoomId", null);
|
this.$store.commit("setCurrentRoomId", null);
|
||||||
this.rooms = this.rooms.filter((room) => {
|
this.rooms = this.rooms.filter((room) => {
|
||||||
room.roomId != roomId;
|
room.roomId != roomId;
|
||||||
|
|
@ -805,7 +816,7 @@ export default {
|
||||||
|
|
||||||
//console.log("Purge: set invite only");
|
//console.log("Purge: set invite only");
|
||||||
statusCallback(this.$t("room.purge_set_room_state"));
|
statusCallback(this.$t("room.purge_set_room_state"));
|
||||||
withRetry(() => this.matrixClient.sendStateEvent(roomId, "m.room.join_rules", { join_rule: "invite" }, ""))
|
withRetry(() => this.matrixClient.sendStateEvent(roomId, "m.room.join_rules", { join_rule: "private" }, ""))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
//console.log("Purge: forbid guest access");
|
//console.log("Purge: forbid guest access");
|
||||||
return withRetry(() => this.matrixClient.sendStateEvent(
|
return withRetry(() => this.matrixClient.sendStateEvent(
|
||||||
|
|
@ -887,6 +898,8 @@ export default {
|
||||||
var invited = room.getMembersWithMembership("invite");
|
var invited = room.getMembersWithMembership("invite");
|
||||||
var allMembers = joined.concat(invited);
|
var allMembers = joined.concat(invited);
|
||||||
|
|
||||||
|
const me = allMembers.find((m) => m.userId == self.currentUserId);
|
||||||
|
|
||||||
const kickFirstMember = (members) => {
|
const kickFirstMember = (members) => {
|
||||||
//console.log(`Kicking ${members.length} members`);
|
//console.log(`Kicking ${members.length} members`);
|
||||||
statusCallback(
|
statusCallback(
|
||||||
|
|
@ -904,7 +917,16 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
// Slight pause to avoid rate limiting.
|
// Slight pause to avoid rate limiting.
|
||||||
return sleep(0.1)
|
return sleep(0.1)
|
||||||
.then(() => withRetry(() => this.matrixClient.kick(roomId, member.userId, "Room Deleted")))
|
.then(() => withRetry(() => {
|
||||||
|
if (member.membership == "invite" && me && me.powerLevel <= member.powerLevel) {
|
||||||
|
// The user is invited, but we can't kick them because of power levels.
|
||||||
|
// Send a new invite with reason set to "Room Deleted".
|
||||||
|
// The client will be sent stripped room state, and can from that see the
|
||||||
|
// join_rule of "private". It will then "leave", i.e. reject the invite.
|
||||||
|
return this.matrixClient.invite(roomId, member.userId, "Room Deleted");
|
||||||
|
}
|
||||||
|
return this.matrixClient.kick(roomId, member.userId, "Room Deleted")
|
||||||
|
}))
|
||||||
.then(() => kickFirstMember(members.slice(1)));
|
.then(() => kickFirstMember(members.slice(1)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue