mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
Update the SDK.
This commit is contained in:
@@ -8659,7 +8659,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 = 25.05.09;
|
version = 25.05.15;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
||||||
|
|||||||
@@ -158,8 +158,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" : "cf913e1417825d08a67cd517b9272b7b808193a8",
|
"revision" : "e84fa0642d90ed123520fd458d920945becf6ba8",
|
||||||
"version" : "25.5.9"
|
"version" : "25.5.15"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ extension RoomInfo {
|
|||||||
isDirect: false,
|
isDirect: false,
|
||||||
isPublic: false,
|
isPublic: false,
|
||||||
isSpace: false,
|
isSpace: false,
|
||||||
isTombstoned: false,
|
tombstone: nil,
|
||||||
isFavourite: false,
|
isFavourite: false,
|
||||||
canonicalAlias: nil,
|
canonicalAlias: nil,
|
||||||
alternativeAliases: [],
|
alternativeAliases: [],
|
||||||
|
|||||||
@@ -2795,6 +2795,152 @@ open class ClientSDKMock: MatrixRustSDK.Client, @unchecked Sendable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MARK: - observeAccountDataEvent
|
||||||
|
|
||||||
|
var observeAccountDataEventEventTypeListenerUnderlyingCallsCount = 0
|
||||||
|
open var observeAccountDataEventEventTypeListenerCallsCount: Int {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return observeAccountDataEventEventTypeListenerUnderlyingCallsCount
|
||||||
|
} else {
|
||||||
|
var returnValue: Int? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = observeAccountDataEventEventTypeListenerUnderlyingCallsCount
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
observeAccountDataEventEventTypeListenerUnderlyingCallsCount = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
observeAccountDataEventEventTypeListenerUnderlyingCallsCount = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var observeAccountDataEventEventTypeListenerCalled: Bool {
|
||||||
|
return observeAccountDataEventEventTypeListenerCallsCount > 0
|
||||||
|
}
|
||||||
|
open var observeAccountDataEventEventTypeListenerReceivedArguments: (eventType: AccountDataEventType, listener: AccountDataListener)?
|
||||||
|
open var observeAccountDataEventEventTypeListenerReceivedInvocations: [(eventType: AccountDataEventType, listener: AccountDataListener)] = []
|
||||||
|
|
||||||
|
var observeAccountDataEventEventTypeListenerUnderlyingReturnValue: TaskHandle!
|
||||||
|
open var observeAccountDataEventEventTypeListenerReturnValue: TaskHandle! {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return observeAccountDataEventEventTypeListenerUnderlyingReturnValue
|
||||||
|
} else {
|
||||||
|
var returnValue: TaskHandle? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = observeAccountDataEventEventTypeListenerUnderlyingReturnValue
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
observeAccountDataEventEventTypeListenerUnderlyingReturnValue = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
observeAccountDataEventEventTypeListenerUnderlyingReturnValue = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var observeAccountDataEventEventTypeListenerClosure: ((AccountDataEventType, AccountDataListener) -> TaskHandle)?
|
||||||
|
|
||||||
|
open override func observeAccountDataEvent(eventType: AccountDataEventType, listener: AccountDataListener) -> TaskHandle {
|
||||||
|
observeAccountDataEventEventTypeListenerCallsCount += 1
|
||||||
|
observeAccountDataEventEventTypeListenerReceivedArguments = (eventType: eventType, listener: listener)
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.observeAccountDataEventEventTypeListenerReceivedInvocations.append((eventType: eventType, listener: listener))
|
||||||
|
}
|
||||||
|
if let observeAccountDataEventEventTypeListenerClosure = observeAccountDataEventEventTypeListenerClosure {
|
||||||
|
return observeAccountDataEventEventTypeListenerClosure(eventType, listener)
|
||||||
|
} else {
|
||||||
|
return observeAccountDataEventEventTypeListenerReturnValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//MARK: - observeRoomAccountDataEvent
|
||||||
|
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerThrowableError: Error?
|
||||||
|
var observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingCallsCount = 0
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerCallsCount: Int {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingCallsCount
|
||||||
|
} else {
|
||||||
|
var returnValue: Int? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingCallsCount
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingCallsCount = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingCallsCount = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerCalled: Bool {
|
||||||
|
return observeRoomAccountDataEventRoomIdEventTypeListenerCallsCount > 0
|
||||||
|
}
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerReceivedArguments: (roomId: String, eventType: RoomAccountDataEventType, listener: RoomAccountDataListener)?
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerReceivedInvocations: [(roomId: String, eventType: RoomAccountDataEventType, listener: RoomAccountDataListener)] = []
|
||||||
|
|
||||||
|
var observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingReturnValue: TaskHandle!
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerReturnValue: TaskHandle! {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingReturnValue
|
||||||
|
} else {
|
||||||
|
var returnValue: TaskHandle? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingReturnValue
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingReturnValue = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
observeRoomAccountDataEventRoomIdEventTypeListenerUnderlyingReturnValue = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var observeRoomAccountDataEventRoomIdEventTypeListenerClosure: ((String, RoomAccountDataEventType, RoomAccountDataListener) throws -> TaskHandle)?
|
||||||
|
|
||||||
|
open override func observeRoomAccountDataEvent(roomId: String, eventType: RoomAccountDataEventType, listener: RoomAccountDataListener) throws -> TaskHandle {
|
||||||
|
if let error = observeRoomAccountDataEventRoomIdEventTypeListenerThrowableError {
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
observeRoomAccountDataEventRoomIdEventTypeListenerCallsCount += 1
|
||||||
|
observeRoomAccountDataEventRoomIdEventTypeListenerReceivedArguments = (roomId: roomId, eventType: eventType, listener: listener)
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.observeRoomAccountDataEventRoomIdEventTypeListenerReceivedInvocations.append((roomId: roomId, eventType: eventType, listener: listener))
|
||||||
|
}
|
||||||
|
if let observeRoomAccountDataEventRoomIdEventTypeListenerClosure = observeRoomAccountDataEventRoomIdEventTypeListenerClosure {
|
||||||
|
return try observeRoomAccountDataEventRoomIdEventTypeListenerClosure(roomId, eventType, listener)
|
||||||
|
} else {
|
||||||
|
return observeRoomAccountDataEventRoomIdEventTypeListenerReturnValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//MARK: - removeAvatar
|
//MARK: - removeAvatar
|
||||||
|
|
||||||
open var removeAvatarThrowableError: Error?
|
open var removeAvatarThrowableError: Error?
|
||||||
@@ -6313,77 +6459,6 @@ open class ClientBuilderSDKMock: MatrixRustSDK.ClientBuilder, @unchecked Sendabl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK: - useEventCachePersistentStorage
|
|
||||||
|
|
||||||
var useEventCachePersistentStorageValueUnderlyingCallsCount = 0
|
|
||||||
open var useEventCachePersistentStorageValueCallsCount: Int {
|
|
||||||
get {
|
|
||||||
if Thread.isMainThread {
|
|
||||||
return useEventCachePersistentStorageValueUnderlyingCallsCount
|
|
||||||
} else {
|
|
||||||
var returnValue: Int? = nil
|
|
||||||
DispatchQueue.main.sync {
|
|
||||||
returnValue = useEventCachePersistentStorageValueUnderlyingCallsCount
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
if Thread.isMainThread {
|
|
||||||
useEventCachePersistentStorageValueUnderlyingCallsCount = newValue
|
|
||||||
} else {
|
|
||||||
DispatchQueue.main.sync {
|
|
||||||
useEventCachePersistentStorageValueUnderlyingCallsCount = newValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
open var useEventCachePersistentStorageValueCalled: Bool {
|
|
||||||
return useEventCachePersistentStorageValueCallsCount > 0
|
|
||||||
}
|
|
||||||
open var useEventCachePersistentStorageValueReceivedValue: Bool?
|
|
||||||
open var useEventCachePersistentStorageValueReceivedInvocations: [Bool] = []
|
|
||||||
|
|
||||||
var useEventCachePersistentStorageValueUnderlyingReturnValue: ClientBuilder!
|
|
||||||
open var useEventCachePersistentStorageValueReturnValue: ClientBuilder! {
|
|
||||||
get {
|
|
||||||
if Thread.isMainThread {
|
|
||||||
return useEventCachePersistentStorageValueUnderlyingReturnValue
|
|
||||||
} else {
|
|
||||||
var returnValue: ClientBuilder? = nil
|
|
||||||
DispatchQueue.main.sync {
|
|
||||||
returnValue = useEventCachePersistentStorageValueUnderlyingReturnValue
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
if Thread.isMainThread {
|
|
||||||
useEventCachePersistentStorageValueUnderlyingReturnValue = newValue
|
|
||||||
} else {
|
|
||||||
DispatchQueue.main.sync {
|
|
||||||
useEventCachePersistentStorageValueUnderlyingReturnValue = newValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
open var useEventCachePersistentStorageValueClosure: ((Bool) -> ClientBuilder)?
|
|
||||||
|
|
||||||
open override func useEventCachePersistentStorage(value: Bool) -> ClientBuilder {
|
|
||||||
useEventCachePersistentStorageValueCallsCount += 1
|
|
||||||
useEventCachePersistentStorageValueReceivedValue = value
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
self.useEventCachePersistentStorageValueReceivedInvocations.append(value)
|
|
||||||
}
|
|
||||||
if let useEventCachePersistentStorageValueClosure = useEventCachePersistentStorageValueClosure {
|
|
||||||
return useEventCachePersistentStorageValueClosure(value)
|
|
||||||
} else {
|
|
||||||
return useEventCachePersistentStorageValueReturnValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//MARK: - userAgent
|
//MARK: - userAgent
|
||||||
|
|
||||||
var userAgentUserAgentUnderlyingCallsCount = 0
|
var userAgentUserAgentUnderlyingCallsCount = 0
|
||||||
@@ -9264,6 +9339,81 @@ open class NotificationClientSDKMock: MatrixRustSDK.NotificationClient, @uncheck
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MARK: - getNotifications
|
||||||
|
|
||||||
|
open var getNotificationsRequestsThrowableError: Error?
|
||||||
|
var getNotificationsRequestsUnderlyingCallsCount = 0
|
||||||
|
open var getNotificationsRequestsCallsCount: Int {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return getNotificationsRequestsUnderlyingCallsCount
|
||||||
|
} else {
|
||||||
|
var returnValue: Int? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = getNotificationsRequestsUnderlyingCallsCount
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
getNotificationsRequestsUnderlyingCallsCount = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
getNotificationsRequestsUnderlyingCallsCount = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var getNotificationsRequestsCalled: Bool {
|
||||||
|
return getNotificationsRequestsCallsCount > 0
|
||||||
|
}
|
||||||
|
open var getNotificationsRequestsReceivedRequests: [NotificationItemsRequest]?
|
||||||
|
open var getNotificationsRequestsReceivedInvocations: [[NotificationItemsRequest]] = []
|
||||||
|
|
||||||
|
var getNotificationsRequestsUnderlyingReturnValue: [String: NotificationItem]!
|
||||||
|
open var getNotificationsRequestsReturnValue: [String: NotificationItem]! {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return getNotificationsRequestsUnderlyingReturnValue
|
||||||
|
} else {
|
||||||
|
var returnValue: [String: NotificationItem]? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = getNotificationsRequestsUnderlyingReturnValue
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
getNotificationsRequestsUnderlyingReturnValue = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
getNotificationsRequestsUnderlyingReturnValue = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var getNotificationsRequestsClosure: (([NotificationItemsRequest]) async throws -> [String: NotificationItem])?
|
||||||
|
|
||||||
|
open override func getNotifications(requests: [NotificationItemsRequest]) async throws -> [String: NotificationItem] {
|
||||||
|
if let error = getNotificationsRequestsThrowableError {
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
getNotificationsRequestsCallsCount += 1
|
||||||
|
getNotificationsRequestsReceivedRequests = requests
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.getNotificationsRequestsReceivedInvocations.append(requests)
|
||||||
|
}
|
||||||
|
if let getNotificationsRequestsClosure = getNotificationsRequestsClosure {
|
||||||
|
return try await getNotificationsRequestsClosure(requests)
|
||||||
|
} else {
|
||||||
|
return getNotificationsRequestsReturnValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//MARK: - getRoom
|
//MARK: - getRoom
|
||||||
|
|
||||||
open var getRoomRoomIdThrowableError: Error?
|
open var getRoomRoomIdThrowableError: Error?
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ extension RoomInfo {
|
|||||||
isDirect: false,
|
isDirect: false,
|
||||||
isPublic: false,
|
isPublic: false,
|
||||||
isSpace: false,
|
isSpace: false,
|
||||||
isTombstoned: false,
|
tombstone: nil,
|
||||||
isFavourite: false,
|
isFavourite: false,
|
||||||
canonicalAlias: nil,
|
canonicalAlias: nil,
|
||||||
alternativeAliases: [],
|
alternativeAliases: [],
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ extension RoomInfo {
|
|||||||
isDirect: configuration.isDirect,
|
isDirect: configuration.isDirect,
|
||||||
isPublic: configuration.isPublic,
|
isPublic: configuration.isPublic,
|
||||||
isSpace: configuration.isSpace,
|
isSpace: configuration.isSpace,
|
||||||
isTombstoned: false,
|
tombstone: nil,
|
||||||
isFavourite: false,
|
isFavourite: false,
|
||||||
canonicalAlias: configuration.canonicalAlias,
|
canonicalAlias: configuration.canonicalAlias,
|
||||||
alternativeAliases: configuration.alternativeAliases,
|
alternativeAliases: configuration.alternativeAliases,
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ extension RoomInfo {
|
|||||||
isDirect: false,
|
isDirect: false,
|
||||||
isPublic: false,
|
isPublic: false,
|
||||||
isSpace: false,
|
isSpace: false,
|
||||||
isTombstoned: false,
|
tombstone: nil,
|
||||||
isFavourite: false,
|
isFavourite: false,
|
||||||
canonicalAlias: nil,
|
canonicalAlias: nil,
|
||||||
alternativeAliases: [],
|
alternativeAliases: [],
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ extension ClientBuilder {
|
|||||||
timeout: requestTimeout,
|
timeout: requestTimeout,
|
||||||
maxConcurrentRequests: nil,
|
maxConcurrentRequests: nil,
|
||||||
maxRetryTime: maxRequestRetryTime))
|
maxRetryTime: maxRequestRetryTime))
|
||||||
.useEventCachePersistentStorage(value: true)
|
|
||||||
|
|
||||||
builder = switch slidingSync {
|
builder = switch slidingSync {
|
||||||
case .restored: builder
|
case .restored: builder
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ struct RoomInfoProxy: BaseRoomInfoProxyProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var isSpace: Bool { roomInfo.isSpace }
|
var isSpace: Bool { roomInfo.isSpace }
|
||||||
var isTombstoned: Bool { roomInfo.isTombstoned }
|
var tombstoneInfo: RoomTombstoneInfo? { roomInfo.tombstone }
|
||||||
var isFavourite: Bool { roomInfo.isFavourite }
|
var isFavourite: Bool { roomInfo.isFavourite }
|
||||||
var canonicalAlias: String? { roomInfo.canonicalAlias }
|
var canonicalAlias: String? { roomInfo.canonicalAlias }
|
||||||
var alternativeAliases: [String] { roomInfo.alternativeAliases }
|
var alternativeAliases: [String] { roomInfo.alternativeAliases }
|
||||||
|
|||||||
+2
-2
@@ -22,8 +22,8 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/jpsim/Yams",
|
"location" : "https://github.com/jpsim/Yams",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "b4b8042411dc7bbb696300a34a4bf3ba1b7ad19b",
|
"revision" : "3d6871d5b4a5cd519adf233fbb576e0a2af71c17",
|
||||||
"version" : "5.3.1"
|
"version" : "5.4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
+1
-1
@@ -65,7 +65,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: 25.05.09
|
exactVersion: 25.05.15
|
||||||
# path: ../matrix-rust-sdk
|
# path: ../matrix-rust-sdk
|
||||||
Compound:
|
Compound:
|
||||||
url: https://github.com/element-hq/compound-ios
|
url: https://github.com/element-hq/compound-ios
|
||||||
|
|||||||
Reference in New Issue
Block a user