Fixes #2486 - Implement blocked users management in the app settings

This commit is contained in:
Stefan Ceriu
2024-02-28 13:21:54 +02:00
committed by GitHub
parent a0b510cb6b
commit 7615e97c7f
46 changed files with 624 additions and 98 deletions
+18 -20
View File
@@ -39,17 +39,17 @@ class RoomProxy: RoomProxyProtocol {
private var subscribedForUpdates = false
private let membersSubject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
var membersPublisher: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
membersSubject.asCurrentValuePublisher()
}
private let typingMembersSubject = CurrentValueSubject<[String], Never>([])
var typingMembers: CurrentValuePublisher<[String], Never> {
var typingMembersPublisher: CurrentValuePublisher<[String], Never> {
typingMembersSubject.asCurrentValuePublisher()
}
private let actionsSubject = PassthroughSubject<RoomProxyAction, Never>()
var actions: AnyPublisher<RoomProxyAction, Never> {
var actionsPublisher: AnyPublisher<RoomProxyAction, Never> {
actionsSubject.eraseToAnyPublisher()
}
@@ -217,7 +217,7 @@ class RoomProxy: RoomProxyProtocol {
}
func getMember(userID: String) async -> Result<RoomMemberProxyProtocol, RoomProxyError> {
if let member = members.value.filter({ $0.userID == userID }).first {
if let member = membersPublisher.value.filter({ $0.userID == userID }).first {
return .success(member)
}
@@ -473,23 +473,21 @@ class RoomProxy: RoomProxyProtocol {
}
private func subscribeToTypingNotifications() {
Task {
typingNotificationObservationToken = await room.subscribeToTypingNotifications(listener: RoomTypingNotificationUpdateListener { [weak self] typingUserIDs in
guard let self else { return }
MXLog.info("Received typing notification update, typingUsers: \(typingUserIDs)")
let typingMembers = typingUserIDs.compactMap { userID in
if let member = self.members.value.filter({ $0.userID == userID }).first {
return member.displayName ?? member.userID
} else {
return userID
}
typingNotificationObservationToken = room.subscribeToTypingNotifications(listener: RoomTypingNotificationUpdateListener { [weak self] typingUserIDs in
guard let self else { return }
MXLog.info("Received typing notification update, typingUsers: \(typingUserIDs)")
let typingMembers = typingUserIDs.compactMap { userID in
if let member = self.membersPublisher.value.filter({ $0.userID == userID }).first {
return member.displayName ?? member.userID
} else {
return userID
}
typingMembersSubject.send(typingMembers)
})
}
}
typingMembersSubject.send(typingMembers)
})
}
}
@@ -62,15 +62,15 @@ protocol RoomProxyProtocol {
var avatarURL: URL? { get }
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
var membersPublisher: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
var typingMembers: CurrentValuePublisher<[String], Never> { get }
var typingMembersPublisher: CurrentValuePublisher<[String], Never> { get }
var joinedMembersCount: Int { get }
var activeMembersCount: Int { get }
var actions: AnyPublisher<RoomProxyAction, Never> { get }
var actionsPublisher: AnyPublisher<RoomProxyAction, Never> { get }
var timeline: TimelineProxyProtocol { get }
@@ -167,6 +167,6 @@ extension RoomProxyProtocol {
func members() async -> [RoomMemberProxyProtocol]? {
await updateMembers()
return members.value
return membersPublisher.value
}
}