mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-19 08:03:50 +02:00
[Spaces] M10.8 Browsing users in a space #4682
- Update after code review
This commit is contained in:
@@ -18,14 +18,17 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
final class SpaceMemberDetailViewModel: SpaceMemberDetailViewModelType {
|
||||
final class SpaceMemberDetailViewModel: NSObject, SpaceMemberDetailViewModelType {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
// MARK: Private
|
||||
|
||||
private let userSessionsService: UserSessionsService
|
||||
private let session: MXSession
|
||||
private let member: MXRoomMember
|
||||
private let spaceId: String
|
||||
private var space: MXSpace?
|
||||
|
||||
private var currentOperation: MXHTTPOperation?
|
||||
|
||||
@@ -36,9 +39,11 @@ final class SpaceMemberDetailViewModel: SpaceMemberDetailViewModelType {
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
init(session: MXSession, member: MXRoomMember) {
|
||||
init(userSessionsService: UserSessionsService, session: MXSession, member: MXRoomMember, spaceId: String) {
|
||||
self.userSessionsService = userSessionsService
|
||||
self.session = session
|
||||
self.member = member
|
||||
self.spaceId = spaceId
|
||||
}
|
||||
|
||||
deinit {
|
||||
@@ -49,6 +54,8 @@ final class SpaceMemberDetailViewModel: SpaceMemberDetailViewModelType {
|
||||
|
||||
func process(viewAction: SpaceMemberDetailViewAction) {
|
||||
switch viewAction {
|
||||
case .loadData:
|
||||
self.loadData()
|
||||
case .openRoom(let roomId):
|
||||
self.coordinatorDelegate?.spaceMemberDetailViewModel(self, showRoomWithId: roomId)
|
||||
case .createRoom(let memberId):
|
||||
@@ -61,47 +68,50 @@ final class SpaceMemberDetailViewModel: SpaceMemberDetailViewModelType {
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func loadData() {
|
||||
self.space = self.session.spaceService.getSpace(withId: self.spaceId)
|
||||
self.update(viewState: .loaded(self.member, self.space?.room))
|
||||
}
|
||||
|
||||
private func update(viewState: SpaceMemberDetailViewState) {
|
||||
self.viewDelegate?.spaceMemberDetailViewModel(self, didUpdateViewState: viewState)
|
||||
}
|
||||
|
||||
private func createDirectRoom(forMemberWithId memberId: String) {
|
||||
self.update(viewState: .loading)
|
||||
AppDelegate.theDelegate().selectMatrixAccount { account in
|
||||
guard let account = account, let session = account.mxSession else {
|
||||
self.update(viewState: .loaded)
|
||||
return
|
||||
guard let account = self.userSessionsService.mainUserSession?.account, let session = account.mxSession else {
|
||||
self.update(viewState: .loaded(self.member, self.space?.room))
|
||||
return
|
||||
}
|
||||
|
||||
let invite: [String]? = (session.myUserId != memberId) ? [memberId] : nil
|
||||
self.currentOperation = session.vc_canEnableE2EByDefaultInNewRoom(withUsers: invite) { canEnableE2E in
|
||||
self.currentOperation = nil
|
||||
let roomCreationParameters = MXRoomCreationParameters()
|
||||
roomCreationParameters.visibility = kMXRoomDirectoryVisibilityPrivate
|
||||
roomCreationParameters.inviteArray = invite
|
||||
roomCreationParameters.isDirect = !(invite?.isEmpty ?? true)
|
||||
roomCreationParameters.preset = kMXRoomPresetTrustedPrivateChat
|
||||
|
||||
if canEnableE2E {
|
||||
roomCreationParameters.initialStateEvents = [MXRoomCreationParameters.initialStateEventForEncryption(withAlgorithm: kMXCryptoMegolmAlgorithm)]
|
||||
}
|
||||
|
||||
let invite: [String]? = (session.myUserId != memberId) ? [memberId] : nil
|
||||
self.currentOperation = session.vc_canEnableE2EByDefaultInNewRoom(withUsers: invite) { canEnableE2E in
|
||||
self.currentOperation = session.createRoom(parameters: roomCreationParameters) { response in
|
||||
self.currentOperation = nil
|
||||
let roomCreationParameters = MXRoomCreationParameters()
|
||||
roomCreationParameters.visibility = kMXRoomDirectoryVisibilityPrivate
|
||||
roomCreationParameters.inviteArray = invite
|
||||
roomCreationParameters.isDirect = !(invite?.isEmpty ?? true)
|
||||
roomCreationParameters.preset = kMXRoomPresetTrustedPrivateChat
|
||||
|
||||
if canEnableE2E {
|
||||
roomCreationParameters.initialStateEvents = [MXRoomCreationParameters.initialStateEventForEncryption(withAlgorithm: kMXCryptoMegolmAlgorithm)]
|
||||
}
|
||||
|
||||
self.currentOperation = session.createRoom(parameters: roomCreationParameters) { response in
|
||||
self.currentOperation = nil
|
||||
self.update(viewState: .loaded)
|
||||
guard response.isSuccess, let room = response.value else {
|
||||
if let error = response.error {
|
||||
self.update(viewState: .error(error))
|
||||
}
|
||||
return
|
||||
self.update(viewState: .loaded(self.member, self.space?.room))
|
||||
guard response.isSuccess, let room = response.value else {
|
||||
if let error = response.error {
|
||||
self.update(viewState: .error(error))
|
||||
}
|
||||
self.coordinatorDelegate?.spaceMemberDetailViewModel(self, showRoomWithId: room.roomId)
|
||||
}
|
||||
} failure: { error in
|
||||
self.update(viewState: .loaded)
|
||||
if let error = error {
|
||||
self.update(viewState: .error(error))
|
||||
return
|
||||
}
|
||||
self.coordinatorDelegate?.spaceMemberDetailViewModel(self, showRoomWithId: room.roomId)
|
||||
}
|
||||
} failure: { error in
|
||||
self.update(viewState: .loaded(self.member, self.space?.room))
|
||||
if let error = error {
|
||||
self.update(viewState: .error(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user