mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-19 08:03:50 +02:00
[spaces] several fixes for pre release
- [Space home view inherits title from previously viewed tab](https://github.com/vector-im/element-ios/issues/4851) - [Home view doesn't refresh when new rooms are created](https://github.com/vector-im/element-ios/issues/4849) - [Odd error message in Space member list](https://github.com/vector-im/element-ios/issues/4845) - [Bring leaving space experience in line with Web](https://github.com/vector-im/element-ios/issues/4850) - [No notification for space invitation](https://github.com/vector-im/element-ios/issues/4840) - [Remove filter when space is switched](https://github.com/vector-im/element-ios/issues/4852) - [M10.11 Remove community tab](https://github.com/vector-im/element-ios/issues/4493)
This commit is contained in:
@@ -75,29 +75,52 @@ class SpaceMenuViewModel: SpaceMenuViewModelType {
|
||||
guard let space = self.session.spaceService.getSpace(withId: self.spaceId), let displayName = space.summary?.displayname else {
|
||||
return
|
||||
}
|
||||
|
||||
let alert = UIAlertController(title: nil, message: VectorL10n.leaveSpaceMessage(displayName), preferredStyle: .alert)
|
||||
|
||||
alert.addAction(UIAlertAction(title: VectorL10n.leave, style: .destructive, handler: { [weak self] action in
|
||||
var message = VectorL10n.leaveSpaceMessage(displayName)
|
||||
|
||||
if let roomState = space.room.dangerousSyncState, let powerLevels = roomState.powerLevels {
|
||||
let powerLevel = powerLevels.powerLevelOfUser(withUserID: self.session.myUserId)
|
||||
let roomPowerLevel = RoomPowerLevelHelper.roomPowerLevel(from: powerLevel)
|
||||
if roomPowerLevel == .admin {
|
||||
message += "\n\n" + VectorL10n.leaveSpaceMessageAdminWarning
|
||||
}
|
||||
}
|
||||
|
||||
let alert = UIAlertController(title: VectorL10n.leaveSpaceTitle(displayName), message: message, preferredStyle: .alert)
|
||||
|
||||
alert.addAction(UIAlertAction(title: VectorL10n.leaveSpaceOnlyAction, style: .default, handler: { [weak self] action in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .loading)
|
||||
|
||||
space.room.leave(completion: { [weak self] response in
|
||||
self.leaveSpace(space)
|
||||
}))
|
||||
alert.addAction(UIAlertAction(title: VectorL10n.leaveSpaceAndAllRoomsAction, style: .destructive, handler: { [weak self] action in
|
||||
guard let self = self, let space = self.session.spaceService.getSpace(withId: self.spaceId) else {
|
||||
return
|
||||
}
|
||||
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .loading)
|
||||
|
||||
let allRoomsAndSpaces = space.childRoomIds + space.childSpaces.map({ space in
|
||||
space.spaceId
|
||||
})
|
||||
|
||||
self.leaveAllRooms(from: allRoomsAndSpaces, at: 0) { [weak self] error in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .loaded)
|
||||
|
||||
if let error = response.error {
|
||||
if let error = error {
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .loaded)
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .error(error))
|
||||
} else {
|
||||
self.process(viewAction: .dismiss)
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
self.leaveSpace(space)
|
||||
}
|
||||
}))
|
||||
alert.addAction(UIAlertAction(title: VectorL10n.cancel, style: .cancel, handler: { [weak self] action in
|
||||
guard let self = self else {
|
||||
@@ -109,4 +132,50 @@ class SpaceMenuViewModel: SpaceMenuViewModelType {
|
||||
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .alert(alert))
|
||||
}
|
||||
|
||||
private func leaveAllRooms(from roomIds: [String], at index: Int, completion: @escaping (_ error: Error?) -> Void) {
|
||||
guard index < roomIds.count, let room = self.session.room(withRoomId: roomIds[index]), !room.isDirect else {
|
||||
let nextIndex = index+1
|
||||
if nextIndex < roomIds.count {
|
||||
self.leaveAllRooms(from: roomIds, at: nextIndex, completion: completion)
|
||||
} else {
|
||||
completion(nil)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
room.leave { [weak self] response in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
guard response.isSuccess else {
|
||||
completion(response.error)
|
||||
return
|
||||
}
|
||||
|
||||
let nextIndex = index+1
|
||||
if nextIndex < roomIds.count {
|
||||
self.leaveAllRooms(from: roomIds, at: nextIndex, completion: completion)
|
||||
} else {
|
||||
completion(nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func leaveSpace(_ space: MXSpace) {
|
||||
space.room.leave(completion: { [weak self] response in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .loaded)
|
||||
|
||||
if let error = response.error {
|
||||
self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .error(error))
|
||||
} else {
|
||||
self.process(viewAction: .dismiss)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user