Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions ElementX/Sources/Mocks/Generated/GeneratedMocks.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5200,6 +5200,71 @@ class ClientProxyMock: ClientProxyProtocol, @unchecked Sendable {
return optimizeStoresReturnValue
}
}
//MARK: - markAllRoomsAsRead

var markAllRoomsAsReadUnderlyingCallsCount = 0
var markAllRoomsAsReadCallsCount: Int {
get {
if Thread.isMainThread {
return markAllRoomsAsReadUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = markAllRoomsAsReadUnderlyingCallsCount
}

return returnValue!
}
}
set {
if Thread.isMainThread {
markAllRoomsAsReadUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
markAllRoomsAsReadUnderlyingCallsCount = newValue
}
}
}
}
var markAllRoomsAsReadCalled: Bool {
return markAllRoomsAsReadCallsCount > 0
}

var markAllRoomsAsReadUnderlyingReturnValue: Result<Void, ClientProxyError>!
var markAllRoomsAsReadReturnValue: Result<Void, ClientProxyError>! {
get {
if Thread.isMainThread {
return markAllRoomsAsReadUnderlyingReturnValue
} else {
var returnValue: Result<Void, ClientProxyError>? = nil
DispatchQueue.main.sync {
returnValue = markAllRoomsAsReadUnderlyingReturnValue
}

return returnValue!
}
}
set {
if Thread.isMainThread {
markAllRoomsAsReadUnderlyingReturnValue = newValue
} else {
DispatchQueue.main.sync {
markAllRoomsAsReadUnderlyingReturnValue = newValue
}
}
}
}
var markAllRoomsAsReadClosure: (() async -> Result<Void, ClientProxyError>)?

@discardableResult
func markAllRoomsAsRead() async -> Result<Void, ClientProxyError> {
markAllRoomsAsReadCallsCount += 1
if let markAllRoomsAsReadClosure = markAllRoomsAsReadClosure {
return await markAllRoomsAsReadClosure()
} else {
return markAllRoomsAsReadReturnValue
}
}
//MARK: - storeSizes

var storeSizesUnderlyingCallsCount = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ struct DeveloperOptionsScreenViewStateBindings {

enum DeveloperOptionsScreenViewAction {
case clearCache
case markAllRoomsAsRead
}

protocol DeveloperOptionsProtocol: AnyObject {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ class DeveloperOptionsScreenViewModel: DeveloperOptionsScreenViewModelType, Deve
actionsSubject.eraseToAnyPublisher()
}

private let clientProxy: ClientProxyProtocol?

init(developerOptions: DeveloperOptionsProtocol, elementCallBaseURL: URL, appHooks: AppHooks, clientProxy: ClientProxyProtocol?) {
self.clientProxy = clientProxy
super.init(initialViewState: .init(elementCallBaseURL: elementCallBaseURL,
appHooks: appHooks,
shouldShowClearCache: clientProxy != nil,
Expand Down Expand Up @@ -55,6 +58,10 @@ class DeveloperOptionsScreenViewModel: DeveloperOptionsScreenViewModelType, Deve
switch viewAction {
case .clearCache:
actionsSubject.send(.clearCache)
case .markAllRoomsAsRead:
Task.detached {
await self.clientProxy?.markAllRoomsAsRead()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import SwiftUI

struct DeveloperOptionsScreen: View {
@Environment(\.dismiss) private var dismiss
@State private var showMarkAllRoomsAsReadAlert = false

@Bindable var context: DeveloperOptionsScreenViewModel.Context

Expand Down Expand Up @@ -130,6 +131,26 @@ struct DeveloperOptionsScreen: View {
}
}

Section {
Button {
showMarkAllRoomsAsReadAlert = true
} label: {
Text("Mark all rooms as read")
}.alert("Are you sure you want to mark all the rooms as read?", isPresented: $showMarkAllRoomsAsReadAlert) {
Button("Cancel", role: .cancel) { }

Button("Yes") {
context.send(viewAction: .markAllRoomsAsRead)
}
}
} footer: {
Text("""
This will send a private read receipt and a read marker in every room you are part of. \
It's a long running operation that might get rate limited. \
It will run in the background but the app must be alive for it to finish.
""")
}

Section {
Button {
showConfetti = true
Expand Down
9 changes: 9 additions & 0 deletions ElementX/Sources/Services/Client/ClientProxy.swift
Original file line number Diff line number Diff line change
Expand Up @@ -857,6 +857,15 @@ class ClientProxy: ClientProxyProtocol {
return .failure(.sdkError(error))
}
}

func markAllRoomsAsRead() async -> Result<Void, ClientProxyError> {
do {
return try await .success(client.markAllRoomsAsRead())
} catch {
MXLog.error("Failed marking all rooms as read with error: \(error)")
return .failure(.sdkError(error))
}
}

func storeSizes() async -> Result<StoreSizes, ClientProxyError> {
do {
Expand Down
2 changes: 2 additions & 0 deletions ElementX/Sources/Services/Client/ClientProxyProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,8 @@ protocol ClientProxyProtocol: AnyObject {
@discardableResult func clearCaches() async -> Result<Void, ClientProxyError>

@discardableResult func optimizeStores() async -> Result<Void, ClientProxyError>

@discardableResult func markAllRoomsAsRead() async -> Result<Void, ClientProxyError>

func storeSizes() async -> Result<StoreSizes, ClientProxyError>

Expand Down
Loading