Send read receipts as messages are displayed. (#1426)

This commit is contained in:
Doug
2023-08-01 11:53:02 +01:00
committed by GitHub
parent f06e063f03
commit 1609ae2036
11 changed files with 234 additions and 40 deletions
@@ -26,7 +26,8 @@ class MockRoomTimelineController: RoomTimelineControllerProtocol {
/// An array of timeline items that will be appended in order when ``simulateIncomingItems()`` is called.
var incomingItems: [RoomTimelineItemProtocol] = []
let roomID = "MockRoomIdentifier"
var roomProxy: RoomProxyProtocol?
var roomID: String { roomProxy?.id ?? "MockRoomIdentifier" }
let callbacks = PassthroughSubject<RoomTimelineControllerCallback, Never>()
@@ -49,7 +50,15 @@ class MockRoomTimelineController: RoomTimelineControllerProtocol {
return .success(())
}
func markRoomAsRead() async -> Result<Void, RoomTimelineControllerError> { .success(()) }
func sendReadReceipt(for itemID: TimelineItemIdentifier) async -> Result<Void, RoomTimelineControllerError> {
guard let roomProxy, let eventID = itemID.eventID else { return .failure(.generic) }
switch await roomProxy.sendReadReceipt(for: eventID) {
case .success:
return .success(())
case .failure:
return .failure(.generic)
}
}
func processItemAppearance(_ itemID: TimelineItemIdentifier) async { }
@@ -82,9 +82,9 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
}
}
func markRoomAsRead() async -> Result<Void, RoomTimelineControllerError> {
func sendReadReceipt(for itemID: TimelineItemIdentifier) async -> Result<Void, RoomTimelineControllerError> {
guard roomProxy.hasUnreadNotifications,
let eventID = timelineItems.last?.id.eventID
let eventID = itemID.eventID
else { return .success(()) }
switch await roomProxy.sendReadReceipt(for: eventID) {
@@ -49,7 +49,7 @@ protocol RoomTimelineControllerProtocol {
func paginateBackwards(requestSize: UInt, untilNumberOfItems: UInt) async -> Result<Void, RoomTimelineControllerError>
func markRoomAsRead() async -> Result<Void, RoomTimelineControllerError>
func sendReadReceipt(for itemID: TimelineItemIdentifier) async -> Result<Void, RoomTimelineControllerError>
func sendMessage(_ message: String, inReplyTo itemID: TimelineItemIdentifier?) async