mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +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)
|
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
|
//MARK: - enableAutomaticCallStatus
|
||||||
|
|
||||||
private let enableAutomaticCallStatusEnabledCallsCountLock = NSLock()
|
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
|
//MARK: - homeserver
|
||||||
|
|
||||||
private let homeserverCallsCountLock = NSLock()
|
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
|
//MARK: - enableShareHistoryOnInvite
|
||||||
|
|
||||||
private let enableShareHistoryOnInviteEnableShareHistoryOnInviteCallsCountLock = NSLock()
|
private let enableShareHistoryOnInviteEnableShareHistoryOnInviteCallsCountLock = NSLock()
|
||||||
@@ -9445,6 +9517,72 @@ open class RoomSDKMock: MatrixRustSDK.Room, @unchecked Sendable {
|
|||||||
}
|
}
|
||||||
fileprivate var underlyingHandle: UInt64!
|
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
|
//MARK: - activeMembersCount
|
||||||
|
|
||||||
private let activeMembersCountCallsCountLock = NSLock()
|
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
|
//MARK: - room
|
||||||
|
|
||||||
open var roomRoomIdThrowableError: Error?
|
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
|
//MARK: - state
|
||||||
|
|
||||||
private let stateListenerCallsCountLock = NSLock()
|
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
|
//MARK: - syncIndicator
|
||||||
|
|
||||||
private let syncIndicatorDelayBeforeShowingInMsDelayBeforeHidingInMsListenerCallsCountLock = NSLock()
|
private let syncIndicatorDelayBeforeShowingInMsDelayBeforeHidingInMsListenerCallsCountLock = NSLock()
|
||||||
@@ -15230,34 +15440,48 @@ open class SendHandleSDKMock: MatrixRustSDK.SendHandle, @unchecked Sendable {
|
|||||||
|
|
||||||
//MARK: - abort
|
//MARK: - abort
|
||||||
|
|
||||||
open var abortThrowableError: Error?
|
open var abortReasonThrowableError: Error?
|
||||||
private let abortCallsCountLock = NSLock()
|
private let abortReasonCallsCountLock = NSLock()
|
||||||
private var abortUnderlyingCallsCount = 0
|
private var abortReasonUnderlyingCallsCount = 0
|
||||||
open var abortCallsCount: Int {
|
open var abortReasonCallsCount: Int {
|
||||||
get { abortCallsCountLock.withLock { abortUnderlyingCallsCount } }
|
get { abortReasonCallsCountLock.withLock { abortReasonUnderlyingCallsCount } }
|
||||||
set { abortCallsCountLock.withLock { abortUnderlyingCallsCount = newValue } }
|
set { abortReasonCallsCountLock.withLock { abortReasonUnderlyingCallsCount = newValue } }
|
||||||
}
|
}
|
||||||
open var abortCalled: Bool {
|
open var abortReasonCalled: Bool {
|
||||||
return abortCallsCount > 0
|
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()
|
private let abortReasonReturnValueLock = NSLock()
|
||||||
open var abortUnderlyingReturnValue: Bool!
|
open var abortReasonUnderlyingReturnValue: Bool!
|
||||||
open var abortReturnValue: Bool! {
|
open var abortReasonReturnValue: Bool! {
|
||||||
get { abortReturnValueLock.withLock { abortUnderlyingReturnValue } }
|
get { abortReasonReturnValueLock.withLock { abortReasonUnderlyingReturnValue } }
|
||||||
set { abortReturnValueLock.withLock { abortUnderlyingReturnValue = newValue } }
|
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 {
|
open override func abort(reason: String? = nil) async throws -> Bool {
|
||||||
if let error = abortThrowableError {
|
if let error = abortReasonThrowableError {
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
abortCallsCountLock.withLock { abortUnderlyingCallsCount += 1 }
|
abortReasonCallsCountLock.withLock { abortReasonUnderlyingCallsCount += 1 }
|
||||||
if let abortClosure = abortClosure {
|
abortReasonReceivedReason = reason
|
||||||
return try await abortClosure()
|
abortReasonReceivedInvocationsLock.withLock { abortReasonUnderlyingReceivedInvocations.append(reason) }
|
||||||
|
if let abortReasonClosure = abortReasonClosure {
|
||||||
|
return try await abortReasonClosure(reason)
|
||||||
} else {
|
} else {
|
||||||
return abortReturnValue
|
return abortReasonReturnValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17674,6 +17898,53 @@ open class TimelineSDKMock: MatrixRustSDK.Timeline, @unchecked Sendable {
|
|||||||
try await editEventOrTransactionIdNewContentClosure?(eventOrTransactionId, newContent)
|
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
|
//MARK: - endPoll
|
||||||
|
|
||||||
open var endPollPollStartEventIdTextThrowableError: Error?
|
open var endPollPollStartEventIdTextThrowableError: Error?
|
||||||
|
|||||||
@@ -10813,7 +10813,7 @@
|
|||||||
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
|
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = exactVersion;
|
kind = exactVersion;
|
||||||
version = 26.08.27;
|
version = 26.09.01;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"originHash" : "20b091ffed1191ab205d228b4682ceec9698235e1d8eb82e9aba1703fc8e9f05",
|
"originHash" : "bcdaa8f9cef68194f84e2cedfc8f5b970018b430090e70cabca834140c3573a5",
|
||||||
"pins" : [
|
"pins" : [
|
||||||
{
|
{
|
||||||
"identity" : "compound-design-tokens",
|
"identity" : "compound-design-tokens",
|
||||||
@@ -167,8 +167,8 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/element-hq/matrix-rust-components-swift",
|
"location" : "https://github.com/element-hq/matrix-rust-components-swift",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "13503ceebfa90f7cc3c0c5de6392fcc73d993570",
|
"revision" : "5aba7a6306b02e79157831e8e352a9a959003e5b",
|
||||||
"version" : "26.8.27"
|
"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_invites_empty_state_title" = "You don't have any pending invites.";
|
||||||
"screen_roomlist_filter_low_priority" = "Low Priority";
|
"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_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_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_mixed_empty_state_title" = "You don’t have chats for this selection";
|
||||||
"screen_roomlist_filter_people" = "People";
|
"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_invites_empty_state_title" = "You don't have any pending invites.";
|
||||||
"screen_roomlist_filter_low_priority" = "Low Priority";
|
"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_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_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_mixed_empty_state_title" = "You don’t have chats for this selection";
|
||||||
"screen_roomlist_filter_people" = "People";
|
"screen_roomlist_filter_people" = "People";
|
||||||
|
|||||||
@@ -407,6 +407,9 @@ final nonisolated class AppSettings: @unchecked Sendable {
|
|||||||
@UserPreference(defaultValue: false)
|
@UserPreference(defaultValue: false)
|
||||||
var lowPriorityFilterEnabled: Bool
|
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.
|
/// 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)
|
@UserPreference(defaultValue: false)
|
||||||
var enableOnlySignedDeviceIsolationMode: Bool
|
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") }
|
internal static var screenRoomlistFilterLowPriority: String { return L10n.tr("Localizable", "screen_roomlist_filter_low_priority") }
|
||||||
/// You don’t have any low priority chats yet
|
/// 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") }
|
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
|
/// 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") }
|
internal static var screenRoomlistFilterMixedEmptyStateSubtitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_mixed_empty_state_subtitle") }
|
||||||
/// You don’t have chats for this selection
|
/// You don’t have chats for this selection
|
||||||
|
|||||||
@@ -17,9 +17,10 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case unreads
|
case unreads
|
||||||
|
case mentions
|
||||||
|
case favourites
|
||||||
case people
|
case people
|
||||||
case rooms
|
case rooms
|
||||||
case favourites
|
|
||||||
case invites
|
case invites
|
||||||
case lowPriority
|
case lowPriority
|
||||||
|
|
||||||
@@ -35,6 +36,8 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
|||||||
return L10n.screenRoomlistFilterRooms
|
return L10n.screenRoomlistFilterRooms
|
||||||
case .unreads:
|
case .unreads:
|
||||||
return L10n.screenRoomlistFilterUnreads
|
return L10n.screenRoomlistFilterUnreads
|
||||||
|
case .mentions:
|
||||||
|
return L10n.screenRoomlistFilterMention
|
||||||
case .favourites:
|
case .favourites:
|
||||||
return L10n.screenRoomlistFilterFavourites
|
return L10n.screenRoomlistFilterFavourites
|
||||||
case .invites:
|
case .invites:
|
||||||
@@ -52,10 +55,12 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
|||||||
return [.people, .invites]
|
return [.people, .invites]
|
||||||
case .unreads:
|
case .unreads:
|
||||||
return [.invites]
|
return [.invites]
|
||||||
|
case .mentions:
|
||||||
|
return [.invites]
|
||||||
case .favourites:
|
case .favourites:
|
||||||
return [.invites, .lowPriority]
|
return [.invites, .lowPriority]
|
||||||
case .invites:
|
case .invites:
|
||||||
return [.rooms, .people, .unreads, .favourites, .lowPriority]
|
return [.rooms, .people, .unreads, .mentions, .favourites, .lowPriority]
|
||||||
case .lowPriority:
|
case .lowPriority:
|
||||||
return [.favourites, .invites]
|
return [.favourites, .invites]
|
||||||
}
|
}
|
||||||
@@ -68,7 +73,9 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
|||||||
case .rooms:
|
case .rooms:
|
||||||
return .all(filters: [.category(expect: .group), .joined])
|
return .all(filters: [.category(expect: .group), .joined])
|
||||||
case .unreads:
|
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:
|
case .favourites:
|
||||||
return .all(filters: [.favourite, .joined])
|
return .all(filters: [.favourite, .joined])
|
||||||
case .invites:
|
case .invites:
|
||||||
@@ -96,6 +103,10 @@ struct RoomListFiltersState {
|
|||||||
availableFilters.remove(.lowPriority)
|
availableFilters.remove(.lowPriority)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !appSettings.mentionsFilterEnabled {
|
||||||
|
availableFilters.remove(.mentions)
|
||||||
|
}
|
||||||
|
|
||||||
for filter in activeFilters {
|
for filter in activeFilters {
|
||||||
availableFilters.remove(filter)
|
availableFilters.remove(filter)
|
||||||
filter.incompatibleFilters.forEach { availableFilters.remove($0) }
|
filter.incompatibleFilters.forEach { availableFilters.remove($0) }
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ struct RoomListFiltersEmptyStateView: View {
|
|||||||
switch state.activeFilters[0] {
|
switch state.activeFilters[0] {
|
||||||
case .unreads:
|
case .unreads:
|
||||||
return L10n.screenRoomlistFilterUnreadsEmptyStateTitle
|
return L10n.screenRoomlistFilterUnreadsEmptyStateTitle
|
||||||
|
case .mentions:
|
||||||
|
return L10n.screenRoomlistFilterMentionEmptyStateTitle
|
||||||
case .people:
|
case .people:
|
||||||
return L10n.screenRoomlistFilterPeopleEmptyStateTitle
|
return L10n.screenRoomlistFilterPeopleEmptyStateTitle
|
||||||
case .rooms:
|
case .rooms:
|
||||||
|
|||||||
+1
@@ -63,6 +63,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
|
|||||||
|
|
||||||
var fuzzyRoomListSearchEnabled: Bool { get set }
|
var fuzzyRoomListSearchEnabled: Bool { get set }
|
||||||
var lowPriorityFilterEnabled: Bool { get set }
|
var lowPriorityFilterEnabled: Bool { get set }
|
||||||
|
var mentionsFilterEnabled: Bool { get set }
|
||||||
var knockingEnabled: Bool { get set }
|
var knockingEnabled: Bool { get set }
|
||||||
|
|
||||||
var linkPreviewsEnabled: Bool { get set }
|
var linkPreviewsEnabled: Bool { get set }
|
||||||
|
|||||||
+4
@@ -75,6 +75,10 @@ struct DeveloperOptionsScreen: View {
|
|||||||
Text("Low priority filter")
|
Text("Low priority filter")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Toggle(isOn: $context.mentionsFilterEnabled) {
|
||||||
|
Text("Mentions filter")
|
||||||
|
}
|
||||||
|
|
||||||
Toggle(isOn: $context.automaticBackPaginationEnabled) {
|
Toggle(isOn: $context.automaticBackPaginationEnabled) {
|
||||||
Text("Automatic back pagination")
|
Text("Automatic back pagination")
|
||||||
Text("Requires app reboot")
|
Text("Requires app reboot")
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
|||||||
appHooks: appHooks,
|
appHooks: appHooks,
|
||||||
enableOnlySignedDeviceIsolationMode: appSettings.enableOnlySignedDeviceIsolationMode,
|
enableOnlySignedDeviceIsolationMode: appSettings.enableOnlySignedDeviceIsolationMode,
|
||||||
threadsEnabled: appSettings.threadsEnabled)
|
threadsEnabled: appSettings.threadsEnabled)
|
||||||
|
.enableAutomaticBackPagination(enableAutomaticBackPagination: appSettings.automaticBackPaginationEnabled)
|
||||||
.sqliteStore(config: .init(dataPath: sessionDirectories.dataPath, cachePath: sessionDirectories.cachePath)
|
.sqliteStore(config: .init(dataPath: sessionDirectories.dataPath, cachePath: sessionDirectories.cachePath)
|
||||||
.passphrase(passphrase: passphrase))
|
.passphrase(passphrase: passphrase))
|
||||||
.serverNameOrHomeserverUrl(serverNameOrUrl: homeserverAddress)
|
.serverNameOrHomeserverUrl(serverNameOrUrl: homeserverAddress)
|
||||||
@@ -63,6 +64,7 @@ nonisolated struct ClientFactory: ClientFactoryProtocol {
|
|||||||
appHooks: appHooks,
|
appHooks: appHooks,
|
||||||
enableOnlySignedDeviceIsolationMode: appSettings.enableOnlySignedDeviceIsolationMode,
|
enableOnlySignedDeviceIsolationMode: appSettings.enableOnlySignedDeviceIsolationMode,
|
||||||
threadsEnabled: appSettings.threadsEnabled)
|
threadsEnabled: appSettings.threadsEnabled)
|
||||||
|
.enableAutomaticBackPagination(enableAutomaticBackPagination: appSettings.automaticBackPaginationEnabled)
|
||||||
.sqliteStore(config: .init(dataPath: credentials.restorationToken.sessionDirectories.dataPath,
|
.sqliteStore(config: .init(dataPath: credentials.restorationToken.sessionDirectories.dataPath,
|
||||||
cachePath: credentials.restorationToken.sessionDirectories.cachePath)
|
cachePath: credentials.restorationToken.sessionDirectories.cachePath)
|
||||||
.passphrase(passphrase: credentials.restorationToken.passphrase))
|
.passphrase(passphrase: credentials.restorationToken.passphrase))
|
||||||
|
|||||||
@@ -214,11 +214,6 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
|
|
||||||
userProfileSubject = .init(UserProfile(userID: (try? client.userId()) ?? ""))
|
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)
|
mediaLoader = MediaLoader(client: client)
|
||||||
|
|
||||||
// Route media downloads through a content scanner when one has been configured for the server,
|
// Route media downloads through a content scanner when one has been configured for the server,
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
|||||||
subscribedForUpdates = true
|
subscribedForUpdates = true
|
||||||
|
|
||||||
do {
|
do {
|
||||||
try await roomListService.subscribeToRooms(roomIds: [id])
|
try await roomListService.setRoomSubscriptions(roomIds: [id])
|
||||||
} catch {
|
} catch {
|
||||||
MXLog.error("Failed subscribing to room with error: \(error)")
|
MXLog.error("Failed subscribing to room with error: \(error)")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
|
|||||||
|
|
||||||
Task { [weak self] in
|
Task { [weak self] in
|
||||||
do {
|
do {
|
||||||
try await self?.roomListService.subscribeToRooms(roomIds: roomIDs)
|
try await self?.roomListService.setRoomSubscriptions(roomIds: roomIDs)
|
||||||
} catch {
|
} catch {
|
||||||
MXLog.error("Failed subscribing to rooms with error: \(error)")
|
MXLog.error("Failed subscribing to rooms with error: \(error)")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:58137b15f53694ca640c21b2b6c148a4a79fb87dd9f73c72e6ebfadbbdd59350
|
oid sha256:c02bce898b1b152d033925056fbc6988aa26586e51c72a197f451a8fee6d6165
|
||||||
size 287230
|
size 287212
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a7c68d341aaab43644e0a19c7b945330e30ebb9f792a68cef9e6e5356a65fefe
|
oid sha256:d6d245a8f330678b0cce10db60408839e0f6a7bbf3e8d0f1e4c4413311485b79
|
||||||
size 297881
|
size 297921
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:699086a1955139e3dde58d790fbde8c9b7786e9733bb8633cd285caae3e945a2
|
oid sha256:21900e354eb87dacdb3eb86c8ea6cc89ca3ca5440360d72857027d3a42f75b7d
|
||||||
size 203524
|
size 203557
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:683c200b9610218b12e1c55678181190b6b2172f9973997be68641dc013f4745
|
oid sha256:9618c5743c9f49ea3f59238f9a8aef209275461954be2ab7faa8d6caadf4da3f
|
||||||
size 209725
|
size 209937
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:fce400b18722256d7c24622726c553318fc6266dddf90361d6f77e03296e0e38
|
oid sha256:9222c9c7b7e7a1b943caf556e1a52c8a06a8529c8af5e19346ccb27c46f3ffbe
|
||||||
size 188015
|
size 212590
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:48ab58418ad2831c39a906d0abe1242f23e5582af3da801b4d2188964daeb640
|
oid sha256:f0f65d8af54ba61434507f3680b7da6b6749b435f4e64b97c3d33c058b7788ec
|
||||||
size 237078
|
size 264744
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a896bccdb2ee452b4e067e8d8e5dc8b78007e3c3904ba20293a58c1b7461f4b8
|
oid sha256:87d818e2f3cb66ab8022b559f863f040dabe6372c5c70c016afd3309c2c66f40
|
||||||
size 173467
|
size 196609
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:29e265bc02c1114e2a97d4eb8f42ecaec66b69556f9da2de95580acd3074f8a8
|
oid sha256:f29790007f2d377d44008be11626a30bcfed2395e868d1e9ba7c154faebccd8d
|
||||||
size 323381
|
size 364929
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:69e544e36a969d194f839cd14ec2a078a867f29c47e986ce620b0405c1ab10c2
|
oid sha256:6db2ba7dce6ca9adfda2b1f04c9a8a1c1ac620e10f63a150512f7f5bb1e9d408
|
||||||
size 76539
|
size 76512
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:8f5ec5862b009b4409dc23dc5c1dbb1c65582c13d290ee144197520aad16fdcf
|
oid sha256:483efa6ea441734da0ec36655ed95f368622f5327e62f380f8256267fb6966fa
|
||||||
size 81060
|
size 81098
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:e6b424f570806806839c4f113547012198c56b8773e82bc099bbef1b3434f241
|
oid sha256:df640a03c091cdddb5faff742a029368b8877f00aa99e2b495e600bddb174345
|
||||||
size 35515
|
size 35357
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:703f9cde60567f6d6da656ec73a1715bf9030ba322aa9b9c61fa56e188e6df2e
|
oid sha256:8e43f0fbdc85743cc981bad603fc472340ecc89ce5b1f47b8d539f0e4b705c27
|
||||||
size 35567
|
size 35866
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ import Testing
|
|||||||
final class RoomListFiltersStateTests {
|
final class RoomListFiltersStateTests {
|
||||||
var appSettings: AppSettings
|
var appSettings: AppSettings
|
||||||
var state: RoomListFiltersState
|
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() {
|
init() {
|
||||||
appSettings = AppSettings.volatile()
|
appSettings = AppSettings.volatile()
|
||||||
@@ -24,7 +25,7 @@ final class RoomListFiltersStateTests {
|
|||||||
func initialState() {
|
func initialState() {
|
||||||
#expect(!state.isFiltering)
|
#expect(!state.isFiltering)
|
||||||
#expect(state.activeFilters == [])
|
#expect(state.activeFilters == [])
|
||||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
#expect(state.availableFilters == defaultFilters)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -32,11 +33,11 @@ final class RoomListFiltersStateTests {
|
|||||||
state.activateFilter(.unreads)
|
state.activateFilter(.unreads)
|
||||||
#expect(state.isFiltering)
|
#expect(state.isFiltering)
|
||||||
#expect(state.activeFilters == [.unreads])
|
#expect(state.activeFilters == [.unreads])
|
||||||
#expect(state.availableFilters == [.people, .rooms, .favourites])
|
#expect(state.availableFilters == [.favourites, .people, .rooms])
|
||||||
state.deactivateFilter(.unreads)
|
state.deactivateFilter(.unreads)
|
||||||
#expect(!state.isFiltering)
|
#expect(!state.isFiltering)
|
||||||
#expect(state.activeFilters == [])
|
#expect(state.activeFilters == [])
|
||||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
#expect(state.availableFilters == defaultFilters)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -49,7 +50,7 @@ final class RoomListFiltersStateTests {
|
|||||||
state.deactivateFilter(.people)
|
state.deactivateFilter(.people)
|
||||||
#expect(!state.isFiltering)
|
#expect(!state.isFiltering)
|
||||||
#expect(state.activeFilters == [])
|
#expect(state.activeFilters == [])
|
||||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
#expect(state.availableFilters == defaultFilters)
|
||||||
|
|
||||||
state.activateFilter(.rooms)
|
state.activateFilter(.rooms)
|
||||||
#expect(state.isFiltering)
|
#expect(state.isFiltering)
|
||||||
@@ -87,7 +88,7 @@ final class RoomListFiltersStateTests {
|
|||||||
state.clearFilters()
|
state.clearFilters()
|
||||||
#expect(!state.isFiltering)
|
#expect(!state.isFiltering)
|
||||||
#expect(state.activeFilters == [])
|
#expect(state.activeFilters == [])
|
||||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
#expect(state.availableFilters == defaultFilters)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -98,7 +99,7 @@ final class RoomListFiltersStateTests {
|
|||||||
|
|
||||||
state.deactivateFilter(.favourites)
|
state.deactivateFilter(.favourites)
|
||||||
#expect(state.activeFilters == [])
|
#expect(state.activeFilters == [])
|
||||||
#expect(state.availableFilters == allCasesWithoutLowPriority)
|
#expect(state.availableFilters == defaultFilters)
|
||||||
|
|
||||||
state.activateFilter(.rooms)
|
state.activateFilter(.rooms)
|
||||||
#expect(state.activeFilters == [.rooms])
|
#expect(state.activeFilters == [.rooms])
|
||||||
@@ -121,17 +122,38 @@ final class RoomListFiltersStateTests {
|
|||||||
enableLowPriorityFeature()
|
enableLowPriorityFeature()
|
||||||
#expect(!state.isFiltering)
|
#expect(!state.isFiltering)
|
||||||
#expect(state.activeFilters == [])
|
#expect(state.activeFilters == [])
|
||||||
#expect(state.availableFilters == RoomListFilter.allCases)
|
#expect(state.availableFilters == defaultFilters + [.lowPriority])
|
||||||
|
|
||||||
state.activateFilter(.lowPriority)
|
state.activateFilter(.lowPriority)
|
||||||
#expect(state.activeFilters == [.lowPriority])
|
#expect(state.activeFilters == [.lowPriority])
|
||||||
#expect(state.availableFilters == [.unreads, .people, .rooms])
|
#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
|
// MARK: - Helpers
|
||||||
|
|
||||||
private func enableLowPriorityFeature() {
|
private func enableLowPriorityFeature() {
|
||||||
appSettings.lowPriorityFilterEnabled = true
|
appSettings.lowPriorityFilterEnabled = true
|
||||||
state = RoomListFiltersState(appSettings: appSettings)
|
state = RoomListFiltersState(appSettings: appSettings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func enableMentionsFeature() {
|
||||||
|
appSettings.mentionsFilterEnabled = true
|
||||||
|
state = RoomListFiltersState(appSettings: appSettings)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -74,7 +74,7 @@ packages:
|
|||||||
# Element/Matrix dependencies
|
# Element/Matrix dependencies
|
||||||
MatrixRustSDK:
|
MatrixRustSDK:
|
||||||
url: https://github.com/element-hq/matrix-rust-components-swift
|
url: https://github.com/element-hq/matrix-rust-components-swift
|
||||||
exactVersion: 26.08.27
|
exactVersion: 26.09.01
|
||||||
# path: ../matrix-rust-sdk
|
# path: ../matrix-rust-sdk
|
||||||
Compound:
|
Compound:
|
||||||
path: compound-ios
|
path: compound-ios
|
||||||
|
|||||||
Reference in New Issue
Block a user