mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Add a Mentions room list filter (#5885)
* Add a Mentions room list filter Adds a new filter chip to the room list that shows only rooms with unread mentions, using the new mentions room list filter from the Rust SDK (matrix-org/matrix-rust-sdk branch matthew/mentions-filter). The SDK version needs bumping to a release that includes the new filter kind before this can build against the released components. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Order the room list filters by expected usage Move Favourites ahead of People and Rooms so the more commonly used filters (Unreads, Mentions, Favourites) sit first in the chip row — Rooms and Invites are used rarely enough that it's fine for them to wrap off the side. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uk8aPxHn3BHCe52L226jdG * update the SDK and use the appropriate rust filter types * preview tests + app settings flag for mentions --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Mauro Romito <mauro.romito@element.io>
This commit is contained in:
@@ -741,24 +741,6 @@ open class ClientSDKMock: MatrixRustSDK.Client, @unchecked Sendable {
|
||||
await enableAllSendQueuesEnableClosure?(enable)
|
||||
}
|
||||
|
||||
//MARK: - enableAutomaticBackpagination
|
||||
|
||||
private let enableAutomaticBackpaginationCallsCountLock = NSLock()
|
||||
private var enableAutomaticBackpaginationUnderlyingCallsCount = 0
|
||||
open var enableAutomaticBackpaginationCallsCount: Int {
|
||||
get { enableAutomaticBackpaginationCallsCountLock.withLock { enableAutomaticBackpaginationUnderlyingCallsCount } }
|
||||
set { enableAutomaticBackpaginationCallsCountLock.withLock { enableAutomaticBackpaginationUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var enableAutomaticBackpaginationCalled: Bool {
|
||||
return enableAutomaticBackpaginationCallsCount > 0
|
||||
}
|
||||
open var enableAutomaticBackpaginationClosure: (() -> Void)?
|
||||
|
||||
open override func enableAutomaticBackpagination() {
|
||||
enableAutomaticBackpaginationCallsCountLock.withLock { enableAutomaticBackpaginationUnderlyingCallsCount += 1 }
|
||||
enableAutomaticBackpaginationClosure?()
|
||||
}
|
||||
|
||||
//MARK: - enableAutomaticCallStatus
|
||||
|
||||
private let enableAutomaticCallStatusEnabledCallsCountLock = NSLock()
|
||||
@@ -1582,6 +1564,53 @@ open class ClientSDKMock: MatrixRustSDK.Client, @unchecked Sendable {
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - getUrlPreview
|
||||
|
||||
open var getUrlPreviewUrlTsThrowableError: Error?
|
||||
private let getUrlPreviewUrlTsCallsCountLock = NSLock()
|
||||
private var getUrlPreviewUrlTsUnderlyingCallsCount = 0
|
||||
open var getUrlPreviewUrlTsCallsCount: Int {
|
||||
get { getUrlPreviewUrlTsCallsCountLock.withLock { getUrlPreviewUrlTsUnderlyingCallsCount } }
|
||||
set { getUrlPreviewUrlTsCallsCountLock.withLock { getUrlPreviewUrlTsUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var getUrlPreviewUrlTsCalled: Bool {
|
||||
return getUrlPreviewUrlTsCallsCount > 0
|
||||
}
|
||||
private let getUrlPreviewUrlTsReceivedArgumentsLock = NSLock()
|
||||
private var getUrlPreviewUrlTsUnderlyingReceivedArguments: (url: String, ts: UInt64?)?
|
||||
open var getUrlPreviewUrlTsReceivedArguments: (url: String, ts: UInt64?)? {
|
||||
get { getUrlPreviewUrlTsReceivedArgumentsLock.withLock { getUrlPreviewUrlTsUnderlyingReceivedArguments } }
|
||||
set { getUrlPreviewUrlTsReceivedArgumentsLock.withLock { getUrlPreviewUrlTsUnderlyingReceivedArguments = newValue } }
|
||||
}
|
||||
private let getUrlPreviewUrlTsReceivedInvocationsLock = NSLock()
|
||||
private var getUrlPreviewUrlTsUnderlyingReceivedInvocations: [(url: String, ts: UInt64?)] = []
|
||||
open var getUrlPreviewUrlTsReceivedInvocations: [(url: String, ts: UInt64?)] {
|
||||
get { getUrlPreviewUrlTsReceivedInvocationsLock.withLock { getUrlPreviewUrlTsUnderlyingReceivedInvocations } }
|
||||
set { getUrlPreviewUrlTsReceivedInvocationsLock.withLock { getUrlPreviewUrlTsUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
|
||||
private let getUrlPreviewUrlTsReturnValueLock = NSLock()
|
||||
open var getUrlPreviewUrlTsUnderlyingReturnValue: String?
|
||||
open var getUrlPreviewUrlTsReturnValue: String? {
|
||||
get { getUrlPreviewUrlTsReturnValueLock.withLock { getUrlPreviewUrlTsUnderlyingReturnValue } }
|
||||
set { getUrlPreviewUrlTsReturnValueLock.withLock { getUrlPreviewUrlTsUnderlyingReturnValue = newValue } }
|
||||
}
|
||||
open var getUrlPreviewUrlTsClosure: ((String, UInt64?) async throws -> String?)?
|
||||
|
||||
open override func getUrlPreview(url: String, ts: UInt64?) async throws -> String? {
|
||||
if let error = getUrlPreviewUrlTsThrowableError {
|
||||
throw error
|
||||
}
|
||||
getUrlPreviewUrlTsCallsCountLock.withLock { getUrlPreviewUrlTsUnderlyingCallsCount += 1 }
|
||||
getUrlPreviewUrlTsReceivedArguments = (url: url, ts: ts)
|
||||
getUrlPreviewUrlTsReceivedInvocationsLock.withLock { getUrlPreviewUrlTsUnderlyingReceivedInvocations.append((url: url, ts: ts)) }
|
||||
if let getUrlPreviewUrlTsClosure = getUrlPreviewUrlTsClosure {
|
||||
return try await getUrlPreviewUrlTsClosure(url, ts)
|
||||
} else {
|
||||
return getUrlPreviewUrlTsReturnValue
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - homeserver
|
||||
|
||||
private let homeserverCallsCountLock = NSLock()
|
||||
@@ -4916,6 +4945,49 @@ open class ClientBuilderSDKMock: MatrixRustSDK.ClientBuilder, @unchecked Sendabl
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - enableAutomaticBackPagination
|
||||
|
||||
private let enableAutomaticBackPaginationEnableAutomaticBackPaginationCallsCountLock = NSLock()
|
||||
private var enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingCallsCount = 0
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationCallsCount: Int {
|
||||
get { enableAutomaticBackPaginationEnableAutomaticBackPaginationCallsCountLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingCallsCount } }
|
||||
set { enableAutomaticBackPaginationEnableAutomaticBackPaginationCallsCountLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationCalled: Bool {
|
||||
return enableAutomaticBackPaginationEnableAutomaticBackPaginationCallsCount > 0
|
||||
}
|
||||
private let enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedEnableAutomaticBackPaginationLock = NSLock()
|
||||
private var enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedEnableAutomaticBackPagination: Bool?
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedEnableAutomaticBackPagination: Bool? {
|
||||
get { enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedEnableAutomaticBackPaginationLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedEnableAutomaticBackPagination } }
|
||||
set { enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedEnableAutomaticBackPaginationLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedEnableAutomaticBackPagination = newValue } }
|
||||
}
|
||||
private let enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedInvocationsLock = NSLock()
|
||||
private var enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedInvocations: [Bool] = []
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedInvocations: [Bool] {
|
||||
get { enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedInvocationsLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedInvocations } }
|
||||
set { enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedInvocationsLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
|
||||
private let enableAutomaticBackPaginationEnableAutomaticBackPaginationReturnValueLock = NSLock()
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReturnValue: ClientBuilder!
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationReturnValue: ClientBuilder! {
|
||||
get { enableAutomaticBackPaginationEnableAutomaticBackPaginationReturnValueLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReturnValue } }
|
||||
set { enableAutomaticBackPaginationEnableAutomaticBackPaginationReturnValueLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReturnValue = newValue } }
|
||||
}
|
||||
open var enableAutomaticBackPaginationEnableAutomaticBackPaginationClosure: ((Bool) -> ClientBuilder)?
|
||||
|
||||
open override func enableAutomaticBackPagination(enableAutomaticBackPagination: Bool) -> ClientBuilder {
|
||||
enableAutomaticBackPaginationEnableAutomaticBackPaginationCallsCountLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingCallsCount += 1 }
|
||||
enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedEnableAutomaticBackPagination = enableAutomaticBackPagination
|
||||
enableAutomaticBackPaginationEnableAutomaticBackPaginationReceivedInvocationsLock.withLock { enableAutomaticBackPaginationEnableAutomaticBackPaginationUnderlyingReceivedInvocations.append(enableAutomaticBackPagination) }
|
||||
if let enableAutomaticBackPaginationEnableAutomaticBackPaginationClosure = enableAutomaticBackPaginationEnableAutomaticBackPaginationClosure {
|
||||
return enableAutomaticBackPaginationEnableAutomaticBackPaginationClosure(enableAutomaticBackPagination)
|
||||
} else {
|
||||
return enableAutomaticBackPaginationEnableAutomaticBackPaginationReturnValue
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - enableShareHistoryOnInvite
|
||||
|
||||
private let enableShareHistoryOnInviteEnableShareHistoryOnInviteCallsCountLock = NSLock()
|
||||
@@ -9445,6 +9517,72 @@ open class RoomSDKMock: MatrixRustSDK.Room, @unchecked Sendable {
|
||||
}
|
||||
fileprivate var underlyingHandle: UInt64!
|
||||
|
||||
//MARK: - activeHumanMemberIds
|
||||
|
||||
open var activeHumanMemberIdsThrowableError: Error?
|
||||
private let activeHumanMemberIdsCallsCountLock = NSLock()
|
||||
private var activeHumanMemberIdsUnderlyingCallsCount = 0
|
||||
open var activeHumanMemberIdsCallsCount: Int {
|
||||
get { activeHumanMemberIdsCallsCountLock.withLock { activeHumanMemberIdsUnderlyingCallsCount } }
|
||||
set { activeHumanMemberIdsCallsCountLock.withLock { activeHumanMemberIdsUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var activeHumanMemberIdsCalled: Bool {
|
||||
return activeHumanMemberIdsCallsCount > 0
|
||||
}
|
||||
|
||||
private let activeHumanMemberIdsReturnValueLock = NSLock()
|
||||
open var activeHumanMemberIdsUnderlyingReturnValue: [String]!
|
||||
open var activeHumanMemberIdsReturnValue: [String]! {
|
||||
get { activeHumanMemberIdsReturnValueLock.withLock { activeHumanMemberIdsUnderlyingReturnValue } }
|
||||
set { activeHumanMemberIdsReturnValueLock.withLock { activeHumanMemberIdsUnderlyingReturnValue = newValue } }
|
||||
}
|
||||
open var activeHumanMemberIdsClosure: (() async throws -> [String])?
|
||||
|
||||
open override func activeHumanMemberIds() async throws -> [String] {
|
||||
if let error = activeHumanMemberIdsThrowableError {
|
||||
throw error
|
||||
}
|
||||
activeHumanMemberIdsCallsCountLock.withLock { activeHumanMemberIdsUnderlyingCallsCount += 1 }
|
||||
if let activeHumanMemberIdsClosure = activeHumanMemberIdsClosure {
|
||||
return try await activeHumanMemberIdsClosure()
|
||||
} else {
|
||||
return activeHumanMemberIdsReturnValue
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - activeHumanMemberIdsNoSync
|
||||
|
||||
open var activeHumanMemberIdsNoSyncThrowableError: Error?
|
||||
private let activeHumanMemberIdsNoSyncCallsCountLock = NSLock()
|
||||
private var activeHumanMemberIdsNoSyncUnderlyingCallsCount = 0
|
||||
open var activeHumanMemberIdsNoSyncCallsCount: Int {
|
||||
get { activeHumanMemberIdsNoSyncCallsCountLock.withLock { activeHumanMemberIdsNoSyncUnderlyingCallsCount } }
|
||||
set { activeHumanMemberIdsNoSyncCallsCountLock.withLock { activeHumanMemberIdsNoSyncUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var activeHumanMemberIdsNoSyncCalled: Bool {
|
||||
return activeHumanMemberIdsNoSyncCallsCount > 0
|
||||
}
|
||||
|
||||
private let activeHumanMemberIdsNoSyncReturnValueLock = NSLock()
|
||||
open var activeHumanMemberIdsNoSyncUnderlyingReturnValue: [String]!
|
||||
open var activeHumanMemberIdsNoSyncReturnValue: [String]! {
|
||||
get { activeHumanMemberIdsNoSyncReturnValueLock.withLock { activeHumanMemberIdsNoSyncUnderlyingReturnValue } }
|
||||
set { activeHumanMemberIdsNoSyncReturnValueLock.withLock { activeHumanMemberIdsNoSyncUnderlyingReturnValue = newValue } }
|
||||
}
|
||||
open var activeHumanMemberIdsNoSyncClosure: (() async throws -> [String])?
|
||||
|
||||
open override func activeHumanMemberIdsNoSync() async throws -> [String] {
|
||||
if let error = activeHumanMemberIdsNoSyncThrowableError {
|
||||
throw error
|
||||
}
|
||||
activeHumanMemberIdsNoSyncCallsCountLock.withLock { activeHumanMemberIdsNoSyncUnderlyingCallsCount += 1 }
|
||||
if let activeHumanMemberIdsNoSyncClosure = activeHumanMemberIdsNoSyncClosure {
|
||||
return try await activeHumanMemberIdsNoSyncClosure()
|
||||
} else {
|
||||
return activeHumanMemberIdsNoSyncReturnValue
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - activeMembersCount
|
||||
|
||||
private let activeMembersCountCallsCountLock = NSLock()
|
||||
@@ -13594,6 +13732,78 @@ open class RoomListServiceSDKMock: MatrixRustSDK.RoomListService, @unchecked Sen
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - removeRoomSubscriptions
|
||||
|
||||
open var removeRoomSubscriptionsRoomIdsThrowableError: Error?
|
||||
private let removeRoomSubscriptionsRoomIdsCallsCountLock = NSLock()
|
||||
private var removeRoomSubscriptionsRoomIdsUnderlyingCallsCount = 0
|
||||
open var removeRoomSubscriptionsRoomIdsCallsCount: Int {
|
||||
get { removeRoomSubscriptionsRoomIdsCallsCountLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingCallsCount } }
|
||||
set { removeRoomSubscriptionsRoomIdsCallsCountLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var removeRoomSubscriptionsRoomIdsCalled: Bool {
|
||||
return removeRoomSubscriptionsRoomIdsCallsCount > 0
|
||||
}
|
||||
private let removeRoomSubscriptionsRoomIdsReceivedRoomIdsLock = NSLock()
|
||||
private var removeRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds: [String]?
|
||||
open var removeRoomSubscriptionsRoomIdsReceivedRoomIds: [String]? {
|
||||
get { removeRoomSubscriptionsRoomIdsReceivedRoomIdsLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds } }
|
||||
set { removeRoomSubscriptionsRoomIdsReceivedRoomIdsLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds = newValue } }
|
||||
}
|
||||
private let removeRoomSubscriptionsRoomIdsReceivedInvocationsLock = NSLock()
|
||||
private var removeRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations: [[String]] = []
|
||||
open var removeRoomSubscriptionsRoomIdsReceivedInvocations: [[String]] {
|
||||
get { removeRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations } }
|
||||
set { removeRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
open var removeRoomSubscriptionsRoomIdsClosure: (([String]) throws -> Void)?
|
||||
|
||||
open override func removeRoomSubscriptions(roomIds: [String]) throws {
|
||||
if let error = removeRoomSubscriptionsRoomIdsThrowableError {
|
||||
throw error
|
||||
}
|
||||
removeRoomSubscriptionsRoomIdsCallsCountLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingCallsCount += 1 }
|
||||
removeRoomSubscriptionsRoomIdsReceivedRoomIds = roomIds
|
||||
removeRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { removeRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations.append(roomIds) }
|
||||
try removeRoomSubscriptionsRoomIdsClosure?(roomIds)
|
||||
}
|
||||
|
||||
//MARK: - resetAndAddRoomSubscriptions
|
||||
|
||||
open var resetAndAddRoomSubscriptionsRoomIdsThrowableError: Error?
|
||||
private let resetAndAddRoomSubscriptionsRoomIdsCallsCountLock = NSLock()
|
||||
private var resetAndAddRoomSubscriptionsRoomIdsUnderlyingCallsCount = 0
|
||||
open var resetAndAddRoomSubscriptionsRoomIdsCallsCount: Int {
|
||||
get { resetAndAddRoomSubscriptionsRoomIdsCallsCountLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingCallsCount } }
|
||||
set { resetAndAddRoomSubscriptionsRoomIdsCallsCountLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var resetAndAddRoomSubscriptionsRoomIdsCalled: Bool {
|
||||
return resetAndAddRoomSubscriptionsRoomIdsCallsCount > 0
|
||||
}
|
||||
private let resetAndAddRoomSubscriptionsRoomIdsReceivedRoomIdsLock = NSLock()
|
||||
private var resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds: [String]?
|
||||
open var resetAndAddRoomSubscriptionsRoomIdsReceivedRoomIds: [String]? {
|
||||
get { resetAndAddRoomSubscriptionsRoomIdsReceivedRoomIdsLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds } }
|
||||
set { resetAndAddRoomSubscriptionsRoomIdsReceivedRoomIdsLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds = newValue } }
|
||||
}
|
||||
private let resetAndAddRoomSubscriptionsRoomIdsReceivedInvocationsLock = NSLock()
|
||||
private var resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations: [[String]] = []
|
||||
open var resetAndAddRoomSubscriptionsRoomIdsReceivedInvocations: [[String]] {
|
||||
get { resetAndAddRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations } }
|
||||
set { resetAndAddRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
open var resetAndAddRoomSubscriptionsRoomIdsClosure: (([String]) async throws -> Void)?
|
||||
|
||||
open override func resetAndAddRoomSubscriptions(roomIds: [String]) async throws {
|
||||
if let error = resetAndAddRoomSubscriptionsRoomIdsThrowableError {
|
||||
throw error
|
||||
}
|
||||
resetAndAddRoomSubscriptionsRoomIdsCallsCountLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingCallsCount += 1 }
|
||||
resetAndAddRoomSubscriptionsRoomIdsReceivedRoomIds = roomIds
|
||||
resetAndAddRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { resetAndAddRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations.append(roomIds) }
|
||||
try await resetAndAddRoomSubscriptionsRoomIdsClosure?(roomIds)
|
||||
}
|
||||
|
||||
//MARK: - room
|
||||
|
||||
open var roomRoomIdThrowableError: Error?
|
||||
@@ -13641,6 +13851,42 @@ open class RoomListServiceSDKMock: MatrixRustSDK.RoomListService, @unchecked Sen
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - setRoomSubscriptions
|
||||
|
||||
open var setRoomSubscriptionsRoomIdsThrowableError: Error?
|
||||
private let setRoomSubscriptionsRoomIdsCallsCountLock = NSLock()
|
||||
private var setRoomSubscriptionsRoomIdsUnderlyingCallsCount = 0
|
||||
open var setRoomSubscriptionsRoomIdsCallsCount: Int {
|
||||
get { setRoomSubscriptionsRoomIdsCallsCountLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingCallsCount } }
|
||||
set { setRoomSubscriptionsRoomIdsCallsCountLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var setRoomSubscriptionsRoomIdsCalled: Bool {
|
||||
return setRoomSubscriptionsRoomIdsCallsCount > 0
|
||||
}
|
||||
private let setRoomSubscriptionsRoomIdsReceivedRoomIdsLock = NSLock()
|
||||
private var setRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds: [String]?
|
||||
open var setRoomSubscriptionsRoomIdsReceivedRoomIds: [String]? {
|
||||
get { setRoomSubscriptionsRoomIdsReceivedRoomIdsLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds } }
|
||||
set { setRoomSubscriptionsRoomIdsReceivedRoomIdsLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingReceivedRoomIds = newValue } }
|
||||
}
|
||||
private let setRoomSubscriptionsRoomIdsReceivedInvocationsLock = NSLock()
|
||||
private var setRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations: [[String]] = []
|
||||
open var setRoomSubscriptionsRoomIdsReceivedInvocations: [[String]] {
|
||||
get { setRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations } }
|
||||
set { setRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
open var setRoomSubscriptionsRoomIdsClosure: (([String]) async throws -> Void)?
|
||||
|
||||
open override func setRoomSubscriptions(roomIds: [String]) async throws {
|
||||
if let error = setRoomSubscriptionsRoomIdsThrowableError {
|
||||
throw error
|
||||
}
|
||||
setRoomSubscriptionsRoomIdsCallsCountLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingCallsCount += 1 }
|
||||
setRoomSubscriptionsRoomIdsReceivedRoomIds = roomIds
|
||||
setRoomSubscriptionsRoomIdsReceivedInvocationsLock.withLock { setRoomSubscriptionsRoomIdsUnderlyingReceivedInvocations.append(roomIds) }
|
||||
try await setRoomSubscriptionsRoomIdsClosure?(roomIds)
|
||||
}
|
||||
|
||||
//MARK: - state
|
||||
|
||||
private let stateListenerCallsCountLock = NSLock()
|
||||
@@ -13684,42 +13930,6 @@ open class RoomListServiceSDKMock: MatrixRustSDK.RoomListService, @unchecked Sen
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - subscribeToRooms
|
||||
|
||||
open var subscribeToRoomsRoomIdsThrowableError: Error?
|
||||
private let subscribeToRoomsRoomIdsCallsCountLock = NSLock()
|
||||
private var subscribeToRoomsRoomIdsUnderlyingCallsCount = 0
|
||||
open var subscribeToRoomsRoomIdsCallsCount: Int {
|
||||
get { subscribeToRoomsRoomIdsCallsCountLock.withLock { subscribeToRoomsRoomIdsUnderlyingCallsCount } }
|
||||
set { subscribeToRoomsRoomIdsCallsCountLock.withLock { subscribeToRoomsRoomIdsUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var subscribeToRoomsRoomIdsCalled: Bool {
|
||||
return subscribeToRoomsRoomIdsCallsCount > 0
|
||||
}
|
||||
private let subscribeToRoomsRoomIdsReceivedRoomIdsLock = NSLock()
|
||||
private var subscribeToRoomsRoomIdsUnderlyingReceivedRoomIds: [String]?
|
||||
open var subscribeToRoomsRoomIdsReceivedRoomIds: [String]? {
|
||||
get { subscribeToRoomsRoomIdsReceivedRoomIdsLock.withLock { subscribeToRoomsRoomIdsUnderlyingReceivedRoomIds } }
|
||||
set { subscribeToRoomsRoomIdsReceivedRoomIdsLock.withLock { subscribeToRoomsRoomIdsUnderlyingReceivedRoomIds = newValue } }
|
||||
}
|
||||
private let subscribeToRoomsRoomIdsReceivedInvocationsLock = NSLock()
|
||||
private var subscribeToRoomsRoomIdsUnderlyingReceivedInvocations: [[String]] = []
|
||||
open var subscribeToRoomsRoomIdsReceivedInvocations: [[String]] {
|
||||
get { subscribeToRoomsRoomIdsReceivedInvocationsLock.withLock { subscribeToRoomsRoomIdsUnderlyingReceivedInvocations } }
|
||||
set { subscribeToRoomsRoomIdsReceivedInvocationsLock.withLock { subscribeToRoomsRoomIdsUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
open var subscribeToRoomsRoomIdsClosure: (([String]) async throws -> Void)?
|
||||
|
||||
open override func subscribeToRooms(roomIds: [String]) async throws {
|
||||
if let error = subscribeToRoomsRoomIdsThrowableError {
|
||||
throw error
|
||||
}
|
||||
subscribeToRoomsRoomIdsCallsCountLock.withLock { subscribeToRoomsRoomIdsUnderlyingCallsCount += 1 }
|
||||
subscribeToRoomsRoomIdsReceivedRoomIds = roomIds
|
||||
subscribeToRoomsRoomIdsReceivedInvocationsLock.withLock { subscribeToRoomsRoomIdsUnderlyingReceivedInvocations.append(roomIds) }
|
||||
try await subscribeToRoomsRoomIdsClosure?(roomIds)
|
||||
}
|
||||
|
||||
//MARK: - syncIndicator
|
||||
|
||||
private let syncIndicatorDelayBeforeShowingInMsDelayBeforeHidingInMsListenerCallsCountLock = NSLock()
|
||||
@@ -15230,34 +15440,48 @@ open class SendHandleSDKMock: MatrixRustSDK.SendHandle, @unchecked Sendable {
|
||||
|
||||
//MARK: - abort
|
||||
|
||||
open var abortThrowableError: Error?
|
||||
private let abortCallsCountLock = NSLock()
|
||||
private var abortUnderlyingCallsCount = 0
|
||||
open var abortCallsCount: Int {
|
||||
get { abortCallsCountLock.withLock { abortUnderlyingCallsCount } }
|
||||
set { abortCallsCountLock.withLock { abortUnderlyingCallsCount = newValue } }
|
||||
open var abortReasonThrowableError: Error?
|
||||
private let abortReasonCallsCountLock = NSLock()
|
||||
private var abortReasonUnderlyingCallsCount = 0
|
||||
open var abortReasonCallsCount: Int {
|
||||
get { abortReasonCallsCountLock.withLock { abortReasonUnderlyingCallsCount } }
|
||||
set { abortReasonCallsCountLock.withLock { abortReasonUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var abortCalled: Bool {
|
||||
return abortCallsCount > 0
|
||||
open var abortReasonCalled: Bool {
|
||||
return abortReasonCallsCount > 0
|
||||
}
|
||||
private let abortReasonReceivedReasonLock = NSLock()
|
||||
private var abortReasonUnderlyingReceivedReason: String?
|
||||
open var abortReasonReceivedReason: String? {
|
||||
get { abortReasonReceivedReasonLock.withLock { abortReasonUnderlyingReceivedReason } }
|
||||
set { abortReasonReceivedReasonLock.withLock { abortReasonUnderlyingReceivedReason = newValue } }
|
||||
}
|
||||
private let abortReasonReceivedInvocationsLock = NSLock()
|
||||
private var abortReasonUnderlyingReceivedInvocations: [String?] = []
|
||||
open var abortReasonReceivedInvocations: [String?] {
|
||||
get { abortReasonReceivedInvocationsLock.withLock { abortReasonUnderlyingReceivedInvocations } }
|
||||
set { abortReasonReceivedInvocationsLock.withLock { abortReasonUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
|
||||
private let abortReturnValueLock = NSLock()
|
||||
open var abortUnderlyingReturnValue: Bool!
|
||||
open var abortReturnValue: Bool! {
|
||||
get { abortReturnValueLock.withLock { abortUnderlyingReturnValue } }
|
||||
set { abortReturnValueLock.withLock { abortUnderlyingReturnValue = newValue } }
|
||||
private let abortReasonReturnValueLock = NSLock()
|
||||
open var abortReasonUnderlyingReturnValue: Bool!
|
||||
open var abortReasonReturnValue: Bool! {
|
||||
get { abortReasonReturnValueLock.withLock { abortReasonUnderlyingReturnValue } }
|
||||
set { abortReasonReturnValueLock.withLock { abortReasonUnderlyingReturnValue = newValue } }
|
||||
}
|
||||
open var abortClosure: (() async throws -> Bool)?
|
||||
open var abortReasonClosure: ((String?) async throws -> Bool)?
|
||||
|
||||
open override func abort() async throws -> Bool {
|
||||
if let error = abortThrowableError {
|
||||
open override func abort(reason: String? = nil) async throws -> Bool {
|
||||
if let error = abortReasonThrowableError {
|
||||
throw error
|
||||
}
|
||||
abortCallsCountLock.withLock { abortUnderlyingCallsCount += 1 }
|
||||
if let abortClosure = abortClosure {
|
||||
return try await abortClosure()
|
||||
abortReasonCallsCountLock.withLock { abortReasonUnderlyingCallsCount += 1 }
|
||||
abortReasonReceivedReason = reason
|
||||
abortReasonReceivedInvocationsLock.withLock { abortReasonUnderlyingReceivedInvocations.append(reason) }
|
||||
if let abortReasonClosure = abortReasonClosure {
|
||||
return try await abortReasonClosure(reason)
|
||||
} else {
|
||||
return abortReturnValue
|
||||
return abortReasonReturnValue
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17674,6 +17898,53 @@ open class TimelineSDKMock: MatrixRustSDK.Timeline, @unchecked Sendable {
|
||||
try await editEventOrTransactionIdNewContentClosure?(eventOrTransactionId, newContent)
|
||||
}
|
||||
|
||||
//MARK: - editRevisions
|
||||
|
||||
open var editRevisionsEventIdThrowableError: Error?
|
||||
private let editRevisionsEventIdCallsCountLock = NSLock()
|
||||
private var editRevisionsEventIdUnderlyingCallsCount = 0
|
||||
open var editRevisionsEventIdCallsCount: Int {
|
||||
get { editRevisionsEventIdCallsCountLock.withLock { editRevisionsEventIdUnderlyingCallsCount } }
|
||||
set { editRevisionsEventIdCallsCountLock.withLock { editRevisionsEventIdUnderlyingCallsCount = newValue } }
|
||||
}
|
||||
open var editRevisionsEventIdCalled: Bool {
|
||||
return editRevisionsEventIdCallsCount > 0
|
||||
}
|
||||
private let editRevisionsEventIdReceivedEventIdLock = NSLock()
|
||||
private var editRevisionsEventIdUnderlyingReceivedEventId: String?
|
||||
open var editRevisionsEventIdReceivedEventId: String? {
|
||||
get { editRevisionsEventIdReceivedEventIdLock.withLock { editRevisionsEventIdUnderlyingReceivedEventId } }
|
||||
set { editRevisionsEventIdReceivedEventIdLock.withLock { editRevisionsEventIdUnderlyingReceivedEventId = newValue } }
|
||||
}
|
||||
private let editRevisionsEventIdReceivedInvocationsLock = NSLock()
|
||||
private var editRevisionsEventIdUnderlyingReceivedInvocations: [String] = []
|
||||
open var editRevisionsEventIdReceivedInvocations: [String] {
|
||||
get { editRevisionsEventIdReceivedInvocationsLock.withLock { editRevisionsEventIdUnderlyingReceivedInvocations } }
|
||||
set { editRevisionsEventIdReceivedInvocationsLock.withLock { editRevisionsEventIdUnderlyingReceivedInvocations = newValue } }
|
||||
}
|
||||
|
||||
private let editRevisionsEventIdReturnValueLock = NSLock()
|
||||
open var editRevisionsEventIdUnderlyingReturnValue: [EditRevisionRecord]!
|
||||
open var editRevisionsEventIdReturnValue: [EditRevisionRecord]! {
|
||||
get { editRevisionsEventIdReturnValueLock.withLock { editRevisionsEventIdUnderlyingReturnValue } }
|
||||
set { editRevisionsEventIdReturnValueLock.withLock { editRevisionsEventIdUnderlyingReturnValue = newValue } }
|
||||
}
|
||||
open var editRevisionsEventIdClosure: ((String) async throws -> [EditRevisionRecord])?
|
||||
|
||||
open override func editRevisions(eventId: String) async throws -> [EditRevisionRecord] {
|
||||
if let error = editRevisionsEventIdThrowableError {
|
||||
throw error
|
||||
}
|
||||
editRevisionsEventIdCallsCountLock.withLock { editRevisionsEventIdUnderlyingCallsCount += 1 }
|
||||
editRevisionsEventIdReceivedEventId = eventId
|
||||
editRevisionsEventIdReceivedInvocationsLock.withLock { editRevisionsEventIdUnderlyingReceivedInvocations.append(eventId) }
|
||||
if let editRevisionsEventIdClosure = editRevisionsEventIdClosure {
|
||||
return try await editRevisionsEventIdClosure(eventId)
|
||||
} else {
|
||||
return editRevisionsEventIdReturnValue
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - endPoll
|
||||
|
||||
open var endPollPollStartEventIdTextThrowableError: Error?
|
||||
|
||||
@@ -10813,7 +10813,7 @@
|
||||
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
|
||||
requirement = {
|
||||
kind = exactVersion;
|
||||
version = 26.08.27;
|
||||
version = 26.09.01;
|
||||
};
|
||||
};
|
||||
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"originHash" : "20b091ffed1191ab205d228b4682ceec9698235e1d8eb82e9aba1703fc8e9f05",
|
||||
"originHash" : "bcdaa8f9cef68194f84e2cedfc8f5b970018b430090e70cabca834140c3573a5",
|
||||
"pins" : [
|
||||
{
|
||||
"identity" : "compound-design-tokens",
|
||||
@@ -167,8 +167,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/element-hq/matrix-rust-components-swift",
|
||||
"state" : {
|
||||
"revision" : "13503ceebfa90f7cc3c0c5de6392fcc73d993570",
|
||||
"version" : "26.8.27"
|
||||
"revision" : "5aba7a6306b02e79157831e8e352a9a959003e5b",
|
||||
"version" : "26.9.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1432,6 +1432,8 @@
|
||||
"screen_roomlist_filter_invites_empty_state_title" = "You don't have any pending invites.";
|
||||
"screen_roomlist_filter_low_priority" = "Low Priority";
|
||||
"screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet";
|
||||
"screen_roomlist_filter_mention" = "Mention";
|
||||
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
|
||||
"screen_roomlist_filter_mixed_empty_state_subtitle" = "You can deselect filters in order to see your other chats";
|
||||
"screen_roomlist_filter_mixed_empty_state_title" = "You don’t have chats for this selection";
|
||||
"screen_roomlist_filter_people" = "People";
|
||||
|
||||
@@ -1432,6 +1432,8 @@
|
||||
"screen_roomlist_filter_invites_empty_state_title" = "You don't have any pending invites.";
|
||||
"screen_roomlist_filter_low_priority" = "Low Priority";
|
||||
"screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet";
|
||||
"screen_roomlist_filter_mention" = "Mention";
|
||||
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
|
||||
"screen_roomlist_filter_mixed_empty_state_subtitle" = "You can deselect filters in order to see your other chats";
|
||||
"screen_roomlist_filter_mixed_empty_state_title" = "You don’t have chats for this selection";
|
||||
"screen_roomlist_filter_people" = "People";
|
||||
|
||||
@@ -407,6 +407,9 @@ final nonisolated class AppSettings: @unchecked Sendable {
|
||||
@UserPreference(defaultValue: false)
|
||||
var lowPriorityFilterEnabled: Bool
|
||||
|
||||
@UserPreference(defaultValue: false)
|
||||
var mentionsFilterEnabled: Bool
|
||||
|
||||
/// Configuration to enable only signed device isolation mode for crypto. In this mode only devices signed by their owner will be considered in e2ee rooms.
|
||||
@UserPreference(defaultValue: false)
|
||||
var enableOnlySignedDeviceIsolationMode: Bool
|
||||
|
||||
@@ -3339,6 +3339,10 @@ internal nonisolated enum L10n {
|
||||
internal static var screenRoomlistFilterLowPriority: String { return L10n.tr("Localizable", "screen_roomlist_filter_low_priority") }
|
||||
/// You don’t have any low priority chats yet
|
||||
internal static var screenRoomlistFilterLowPriorityEmptyStateTitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_low_priority_empty_state_title") }
|
||||
/// Mention
|
||||
internal static var screenRoomlistFilterMention: String { return L10n.tr("Localizable", "screen_roomlist_filter_mention") }
|
||||
/// You don’t have any unread mentions
|
||||
internal static var screenRoomlistFilterMentionEmptyStateTitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_mention_empty_state_title") }
|
||||
/// You can deselect filters in order to see your other chats
|
||||
internal static var screenRoomlistFilterMixedEmptyStateSubtitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_mixed_empty_state_subtitle") }
|
||||
/// You don’t have chats for this selection
|
||||
|
||||
@@ -17,9 +17,10 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
||||
}
|
||||
|
||||
case unreads
|
||||
case mentions
|
||||
case favourites
|
||||
case people
|
||||
case rooms
|
||||
case favourites
|
||||
case invites
|
||||
case lowPriority
|
||||
|
||||
@@ -35,6 +36,8 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
||||
return L10n.screenRoomlistFilterRooms
|
||||
case .unreads:
|
||||
return L10n.screenRoomlistFilterUnreads
|
||||
case .mentions:
|
||||
return L10n.screenRoomlistFilterMention
|
||||
case .favourites:
|
||||
return L10n.screenRoomlistFilterFavourites
|
||||
case .invites:
|
||||
@@ -52,10 +55,12 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
||||
return [.people, .invites]
|
||||
case .unreads:
|
||||
return [.invites]
|
||||
case .mentions:
|
||||
return [.invites]
|
||||
case .favourites:
|
||||
return [.invites, .lowPriority]
|
||||
case .invites:
|
||||
return [.rooms, .people, .unreads, .favourites, .lowPriority]
|
||||
return [.rooms, .people, .unreads, .mentions, .favourites, .lowPriority]
|
||||
case .lowPriority:
|
||||
return [.favourites, .invites]
|
||||
}
|
||||
@@ -68,7 +73,9 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
||||
case .rooms:
|
||||
return .all(filters: [.category(expect: .group), .joined])
|
||||
case .unreads:
|
||||
return .all(filters: [.unread, .joined])
|
||||
return .all(filters: [.readReceipts(expect: .notifications), .joined])
|
||||
case .mentions:
|
||||
return .all(filters: [.readReceipts(expect: .mentions), .joined])
|
||||
case .favourites:
|
||||
return .all(filters: [.favourite, .joined])
|
||||
case .invites:
|
||||
@@ -96,6 +103,10 @@ struct RoomListFiltersState {
|
||||
availableFilters.remove(.lowPriority)
|
||||
}
|
||||
|
||||
if !appSettings.mentionsFilterEnabled {
|
||||
availableFilters.remove(.mentions)
|
||||
}
|
||||
|
||||
for filter in activeFilters {
|
||||
availableFilters.remove(filter)
|
||||
filter.incompatibleFilters.forEach { availableFilters.remove($0) }
|
||||
|
||||
@@ -16,6 +16,8 @@ struct RoomListFiltersEmptyStateView: View {
|
||||
switch state.activeFilters[0] {
|
||||
case .unreads:
|
||||
return L10n.screenRoomlistFilterUnreadsEmptyStateTitle
|
||||
case .mentions:
|
||||
return L10n.screenRoomlistFilterMentionEmptyStateTitle
|
||||
case .people:
|
||||
return L10n.screenRoomlistFilterPeopleEmptyStateTitle
|
||||
case .rooms:
|
||||
|
||||
+1
@@ -63,6 +63,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
|
||||
|
||||
var fuzzyRoomListSearchEnabled: Bool { get set }
|
||||
var lowPriorityFilterEnabled: Bool { get set }
|
||||
var mentionsFilterEnabled: Bool { get set }
|
||||
var knockingEnabled: Bool { get set }
|
||||
|
||||
var linkPreviewsEnabled: Bool { get set }
|
||||
|
||||
+4
@@ -75,6 +75,10 @@ struct DeveloperOptionsScreen: View {
|
||||
Text("Low priority filter")
|
||||
}
|
||||
|
||||
Toggle(isOn: $context.mentionsFilterEnabled) {
|
||||
Text("Mentions filter")
|
||||
}
|
||||
|
||||
Toggle(isOn: $context.automaticBackPaginationEnabled) {
|
||||
Text("Automatic back pagination")
|
||||
Text("Requires app reboot")
|
||||
|
||||
@@ -26,6 +26,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
||||
appHooks: appHooks,
|
||||
enableOnlySignedDeviceIsolationMode: appSettings.enableOnlySignedDeviceIsolationMode,
|
||||
threadsEnabled: appSettings.threadsEnabled)
|
||||
.enableAutomaticBackPagination(enableAutomaticBackPagination: appSettings.automaticBackPaginationEnabled)
|
||||
.sqliteStore(config: .init(dataPath: sessionDirectories.dataPath, cachePath: sessionDirectories.cachePath)
|
||||
.passphrase(passphrase: passphrase))
|
||||
.serverNameOrHomeserverUrl(serverNameOrUrl: homeserverAddress)
|
||||
@@ -63,6 +64,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
||||
appHooks: appHooks,
|
||||
enableOnlySignedDeviceIsolationMode: appSettings.enableOnlySignedDeviceIsolationMode,
|
||||
threadsEnabled: appSettings.threadsEnabled)
|
||||
.enableAutomaticBackPagination(enableAutomaticBackPagination: appSettings.automaticBackPaginationEnabled)
|
||||
.sqliteStore(config: .init(dataPath: credentials.restorationToken.sessionDirectories.dataPath,
|
||||
cachePath: credentials.restorationToken.sessionDirectories.cachePath)
|
||||
.passphrase(passphrase: credentials.restorationToken.passphrase))
|
||||
|
||||
@@ -214,11 +214,6 @@ class ClientProxy: ClientProxyProtocol {
|
||||
|
||||
userProfileSubject = .init(UserProfile(userID: (try? client.userId()) ?? ""))
|
||||
|
||||
if appSettings.automaticBackPaginationEnabled {
|
||||
// Must be called before creating the sync service, timelines etc.
|
||||
client.enableAutomaticBackpagination()
|
||||
}
|
||||
|
||||
mediaLoader = MediaLoader(client: client)
|
||||
|
||||
// Route media downloads through a content scanner when one has been configured for the server,
|
||||
|
||||
@@ -114,7 +114,7 @@ class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
||||
subscribedForUpdates = true
|
||||
|
||||
do {
|
||||
try await roomListService.subscribeToRooms(roomIds: [id])
|
||||
try await roomListService.setRoomSubscriptions(roomIds: [id])
|
||||
} catch {
|
||||
MXLog.error("Failed subscribing to room with error: \(error)")
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
|
||||
|
||||
Task { [weak self] in
|
||||
do {
|
||||
try await self?.roomListService.subscribeToRooms(roomIds: roomIDs)
|
||||
try await self?.roomListService.setRoomSubscriptions(roomIds: roomIDs)
|
||||
} catch {
|
||||
MXLog.error("Failed subscribing to rooms with error: \(error)")
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:58137b15f53694ca640c21b2b6c148a4a79fb87dd9f73c72e6ebfadbbdd59350
|
||||
size 287230
|
||||
oid sha256:c02bce898b1b152d033925056fbc6988aa26586e51c72a197f451a8fee6d6165
|
||||
size 287212
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a7c68d341aaab43644e0a19c7b945330e30ebb9f792a68cef9e6e5356a65fefe
|
||||
size 297881
|
||||
oid sha256:d6d245a8f330678b0cce10db60408839e0f6a7bbf3e8d0f1e4c4413311485b79
|
||||
size 297921
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:699086a1955139e3dde58d790fbde8c9b7786e9733bb8633cd285caae3e945a2
|
||||
size 203524
|
||||
oid sha256:21900e354eb87dacdb3eb86c8ea6cc89ca3ca5440360d72857027d3a42f75b7d
|
||||
size 203557
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:683c200b9610218b12e1c55678181190b6b2172f9973997be68641dc013f4745
|
||||
size 209725
|
||||
oid sha256:9618c5743c9f49ea3f59238f9a8aef209275461954be2ab7faa8d6caadf4da3f
|
||||
size 209937
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fce400b18722256d7c24622726c553318fc6266dddf90361d6f77e03296e0e38
|
||||
size 188015
|
||||
oid sha256:9222c9c7b7e7a1b943caf556e1a52c8a06a8529c8af5e19346ccb27c46f3ffbe
|
||||
size 212590
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:48ab58418ad2831c39a906d0abe1242f23e5582af3da801b4d2188964daeb640
|
||||
size 237078
|
||||
oid sha256:f0f65d8af54ba61434507f3680b7da6b6749b435f4e64b97c3d33c058b7788ec
|
||||
size 264744
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a896bccdb2ee452b4e067e8d8e5dc8b78007e3c3904ba20293a58c1b7461f4b8
|
||||
size 173467
|
||||
oid sha256:87d818e2f3cb66ab8022b559f863f040dabe6372c5c70c016afd3309c2c66f40
|
||||
size 196609
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:29e265bc02c1114e2a97d4eb8f42ecaec66b69556f9da2de95580acd3074f8a8
|
||||
size 323381
|
||||
oid sha256:f29790007f2d377d44008be11626a30bcfed2395e868d1e9ba7c154faebccd8d
|
||||
size 364929
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:69e544e36a969d194f839cd14ec2a078a867f29c47e986ce620b0405c1ab10c2
|
||||
size 76539
|
||||
oid sha256:6db2ba7dce6ca9adfda2b1f04c9a8a1c1ac620e10f63a150512f7f5bb1e9d408
|
||||
size 76512
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8f5ec5862b009b4409dc23dc5c1dbb1c65582c13d290ee144197520aad16fdcf
|
||||
size 81060
|
||||
oid sha256:483efa6ea441734da0ec36655ed95f368622f5327e62f380f8256267fb6966fa
|
||||
size 81098
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e6b424f570806806839c4f113547012198c56b8773e82bc099bbef1b3434f241
|
||||
size 35515
|
||||
oid sha256:df640a03c091cdddb5faff742a029368b8877f00aa99e2b495e600bddb174345
|
||||
size 35357
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:703f9cde60567f6d6da656ec73a1715bf9030ba322aa9b9c61fa56e188e6df2e
|
||||
size 35567
|
||||
oid sha256:8e43f0fbdc85743cc981bad603fc472340ecc89ce5b1f47b8d539f0e4b705c27
|
||||
size 35866
|
||||
|
||||
@@ -13,7 +13,8 @@ import Testing
|
||||
final class RoomListFiltersStateTests {
|
||||
var appSettings: AppSettings
|
||||
var state: RoomListFiltersState
|
||||
let allCasesWithoutLowPriority = RoomListFilter.allCases.filter { $0 != .lowPriority }
|
||||
/// The filters that aren't hidden behind a feature flag.
|
||||
let defaultFilters = RoomListFilter.allCases.filter { $0 != .mentions && $0 != .lowPriority }
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
@@ -24,7 +25,7 @@ final class RoomListFiltersStateTests {
|
||||
func initialState() {
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -32,11 +33,11 @@ final class RoomListFiltersStateTests {
|
||||
state.activateFilter(.unreads)
|
||||
#expect(state.isFiltering)
|
||||
#expect(state.activeFilters == [.unreads])
|
||||
#expect(state.availableFilters == [.people, .rooms, .favourites])
|
||||
#expect(state.availableFilters == [.favourites, .people, .rooms])
|
||||
state.deactivateFilter(.unreads)
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -49,7 +50,7 @@ final class RoomListFiltersStateTests {
|
||||
state.deactivateFilter(.people)
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
|
||||
state.activateFilter(.rooms)
|
||||
#expect(state.isFiltering)
|
||||
@@ -87,7 +88,7 @@ final class RoomListFiltersStateTests {
|
||||
state.clearFilters()
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -98,7 +99,7 @@ final class RoomListFiltersStateTests {
|
||||
|
||||
state.deactivateFilter(.favourites)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
||||
#expect(state.availableFilters == defaultFilters)
|
||||
|
||||
state.activateFilter(.rooms)
|
||||
#expect(state.activeFilters == [.rooms])
|
||||
@@ -121,17 +122,38 @@ final class RoomListFiltersStateTests {
|
||||
enableLowPriorityFeature()
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == RoomListFilter.allCases)
|
||||
#expect(state.availableFilters == defaultFilters + [.lowPriority])
|
||||
|
||||
state.activateFilter(.lowPriority)
|
||||
#expect(state.activeFilters == [.lowPriority])
|
||||
#expect(state.availableFilters == [.unreads, .people, .rooms])
|
||||
}
|
||||
|
||||
// MARK: Mentions feature flag
|
||||
|
||||
/// Don't forget to add .mentions into the mix above when enabling the feature.
|
||||
@Test
|
||||
func withMentionsFeature() {
|
||||
enableMentionsFeature()
|
||||
#expect(!state.isFiltering)
|
||||
#expect(state.activeFilters == [])
|
||||
#expect(state.availableFilters == [.unreads, .mentions, .favourites, .people, .rooms, .invites])
|
||||
|
||||
state.activateFilter(.mentions)
|
||||
#expect(state.isFiltering)
|
||||
#expect(state.activeFilters == [.mentions])
|
||||
#expect(state.availableFilters == [.unreads, .favourites, .people, .rooms])
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
private func enableLowPriorityFeature() {
|
||||
appSettings.lowPriorityFilterEnabled = true
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
}
|
||||
|
||||
private func enableMentionsFeature() {
|
||||
appSettings.mentionsFilterEnabled = true
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ packages:
|
||||
# Element/Matrix dependencies
|
||||
MatrixRustSDK:
|
||||
url: https://github.com/element-hq/matrix-rust-components-swift
|
||||
exactVersion: 26.08.27
|
||||
exactVersion: 26.09.01
|
||||
# path: ../matrix-rust-sdk
|
||||
Compound:
|
||||
path: compound-ios
|
||||
|
||||
Reference in New Issue
Block a user