Skip to content

Commit

Permalink
mark all knocks as seen implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
Velin92 committed Dec 3, 2024
1 parent 5192dc3 commit eded98e
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 13 deletions.
11 changes: 0 additions & 11 deletions ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1651,14 +1651,3 @@ private extension RoomFlowCoordinator {
case dismissKnockRequestsListScreen
}
}

private extension Result {
var isFailure: Bool {
switch self {
case .success:
return false
case .failure:
return true
}
}
}
17 changes: 17 additions & 0 deletions ElementX/Sources/Other/Extensions/Result.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// Copyright 2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only
// Please see LICENSE in the repository root for full details.
//

extension Result {
var isFailure: Bool {
switch self {
case .success:
return false
case .failure:
return true
}
}
}
22 changes: 20 additions & 2 deletions ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
case .acceptKnock(let eventID):
Task { await acceptKnock(eventID: eventID) }
case .dismissKnockRequests:
// TODO: API to mark knocks as seen required
break
Task { await markAllKnocksAsSeen() }
case .viewKnockRequests:
actionsSubject.send(.displayKnockRequests)
}
Expand Down Expand Up @@ -304,6 +303,25 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
}
}

private func markAllKnocksAsSeen() async {
let requests = roomProxy.requestsToJoinPublisher.value
state.handledEventIDs.formUnion(Set(requests.map(\.eventID)))
let failedIDs = await withTaskGroup(of: (String, Result<Void, RequestToJoinProxyError>).self) { group in
for request in requests {
group.addTask {
await (request.eventID, request.markAsSeen())
}
}

var failedIDs = [String]()
for await result in group where result.1.isFailure {
failedIDs.append(result.0)
}
return failedIDs
}
state.handledEventIDs.subtract(failedIDs)
}

// MARK: Loading indicators

private static let loadingIndicatorIdentifier = "\(RoomScreenViewModel.self)-Loading"
Expand Down

0 comments on commit eded98e

Please sign in to comment.