vector-im/element-x-ios/issues/53 - Converted most callback based methods to async/await

This commit is contained in:
Stefan Ceriu
2022-05-24 16:59:01 +03:00
committed by Stefan Ceriu
parent f2fe39eca7
commit dde7786152
23 changed files with 407 additions and 454 deletions
@@ -70,28 +70,31 @@ final class HomeScreenCoordinator: Coordinator, Presentable {
}
}
parameters.userSession.callbacks.sink { [weak self] result in
switch result {
case .updatedRoomsList:
self?.updateRoomsList()
}
}.store(in: &cancellables)
parameters.userSession
.callbacks
.receive(on: DispatchQueue.main)
.sink { [weak self] result in
switch result {
case .updatedRoomsList:
self?.updateRoomsList()
}
}.store(in: &cancellables)
updateRoomsList()
parameters.userSession.userAvatarURL { [weak self] result in
if case let .success(avatarURL) = result {
self?.parameters.mediaProvider.loadImageFromURL(avatarURL) { result in
if case let .success(avatar) = result {
self?.viewModel.updateWithUserAvatar(avatar)
Task {
if case let .success(userAvatarURL) = await parameters.userSession.loadUserAvatarURL() {
if case let .success(avatar) = await parameters.mediaProvider.loadImageFromURL(userAvatarURL) {
await MainActor.run {
self.viewModel.updateWithUserAvatar(avatar)
}
}
}
}
parameters.userSession.userDisplayName { [weak self] result in
if case let .success(displayName) = result {
self?.viewModel.updateWithUserDisplayName(displayName)
if case let .success(userDisplayName) = await parameters.userSession.loadUserDisplayName() {
await MainActor.run {
self.viewModel.updateWithUserDisplayName(userDisplayName)
}
}
}
}
@@ -65,19 +65,21 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
roomUpdateListeners.removeAll()
roomList.forEach({ roomSummary in
roomSummary.callbacks.sink { [weak self] callback in
guard let self = self else {
return
}
switch callback {
case .updatedData:
if let index = self.state.rooms.firstIndex(where: { $0.id == roomSummary.id }) {
self.state.rooms[index] = self.buildOrUpdateRoomFromSummary(roomSummary)
roomSummary.callbacks
.receive(on: DispatchQueue.main)
.sink { [weak self] callback in
guard let self = self else {
return
}
switch callback {
case .updatedData:
if let index = self.state.rooms.firstIndex(where: { $0.id == roomSummary.id }) {
self.state.rooms[index] = self.buildOrUpdateRoomFromSummary(roomSummary)
}
}
}
}
.store(in: &roomUpdateListeners)
.store(in: &roomUpdateListeners)
})
}
@@ -98,7 +100,9 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
return
}
roomSummary.loadData()
Task {
await roomSummary.loadDetails()
}
}
private func buildOrUpdateRoomFromSummary(_ roomSummary: RoomSummaryProtocol) -> HomeScreenRoom {
@@ -152,7 +152,7 @@ struct RoomCell: View {
}
.animation(.easeInOut, value: room)
.frame(minHeight: 60.0)
.onAppear {
.task {
context.send(viewAction: .loadRoomData(roomIdentifier: room.id))
}
}