Update the SDK and handle API breaks. (#5871)

* Update the SDK and handle API breaks.

* Rename sdkUserThing to rustUserThing for consistency.

* Add user status ClientProxy methods.

* Rename UserStatus.UserSet to UserStatus.Raw.
This commit is contained in:
Doug
2026-07-14 16:35:37 +01:00
committed by GitHub
parent f776ea7133
commit 85f28d017d
17 changed files with 278 additions and 54 deletions
@@ -3316,6 +3316,76 @@ nonisolated class ClientProxyMock: ClientProxyProtocol, @unchecked Sendable {
return removeUserAvatarReturnValue
}
}
//MARK: - setUserStatus
private let setUserStatusCallsCountLock = NSLock()
private nonisolated(unsafe) var setUserStatusUnderlyingCallsCount = 0
var setUserStatusCallsCount: Int {
get { setUserStatusCallsCountLock.withLock { setUserStatusUnderlyingCallsCount } }
set { setUserStatusCallsCountLock.withLock { setUserStatusUnderlyingCallsCount = newValue } }
}
var setUserStatusCalled: Bool {
return setUserStatusCallsCount > 0
}
private let setUserStatusReceivedStatusLock = NSLock()
private nonisolated(unsafe) var setUserStatusUnderlyingReceivedStatus: UserStatus.Raw?
var setUserStatusReceivedStatus: UserStatus.Raw? {
get { setUserStatusReceivedStatusLock.withLock { setUserStatusUnderlyingReceivedStatus } }
set { setUserStatusReceivedStatusLock.withLock { setUserStatusUnderlyingReceivedStatus = newValue } }
}
private let setUserStatusReceivedInvocationsLock = NSLock()
private nonisolated(unsafe) var setUserStatusUnderlyingReceivedInvocations: [UserStatus.Raw] = []
var setUserStatusReceivedInvocations: [UserStatus.Raw] {
get { setUserStatusReceivedInvocationsLock.withLock { setUserStatusUnderlyingReceivedInvocations } }
set { setUserStatusReceivedInvocationsLock.withLock { setUserStatusUnderlyingReceivedInvocations = newValue } }
}
private let setUserStatusReturnValueLock = NSLock()
private nonisolated(unsafe) var setUserStatusUnderlyingReturnValue: Result<Void, ClientProxyError>!
var setUserStatusReturnValue: Result<Void, ClientProxyError>! {
get { setUserStatusReturnValueLock.withLock { setUserStatusUnderlyingReturnValue } }
set { setUserStatusReturnValueLock.withLock { setUserStatusUnderlyingReturnValue = newValue } }
}
nonisolated(unsafe) var setUserStatusClosure: ((UserStatus.Raw) async -> Result<Void, ClientProxyError>)?
@concurrent func setUserStatus(_ status: UserStatus.Raw) async -> Result<Void, ClientProxyError> {
setUserStatusCallsCountLock.withLock { setUserStatusUnderlyingCallsCount += 1 }
setUserStatusReceivedStatus = status
setUserStatusReceivedInvocationsLock.withLock { setUserStatusUnderlyingReceivedInvocations.append(status) }
if let setUserStatusClosure = setUserStatusClosure {
return await setUserStatusClosure(status)
} else {
return setUserStatusReturnValue
}
}
//MARK: - removeUserStatus
private let removeUserStatusCallsCountLock = NSLock()
private nonisolated(unsafe) var removeUserStatusUnderlyingCallsCount = 0
var removeUserStatusCallsCount: Int {
get { removeUserStatusCallsCountLock.withLock { removeUserStatusUnderlyingCallsCount } }
set { removeUserStatusCallsCountLock.withLock { removeUserStatusUnderlyingCallsCount = newValue } }
}
var removeUserStatusCalled: Bool {
return removeUserStatusCallsCount > 0
}
private let removeUserStatusReturnValueLock = NSLock()
private nonisolated(unsafe) var removeUserStatusUnderlyingReturnValue: Result<Void, ClientProxyError>!
var removeUserStatusReturnValue: Result<Void, ClientProxyError>! {
get { removeUserStatusReturnValueLock.withLock { removeUserStatusUnderlyingReturnValue } }
set { removeUserStatusReturnValueLock.withLock { removeUserStatusUnderlyingReturnValue = newValue } }
}
nonisolated(unsafe) var removeUserStatusClosure: (() async -> Result<Void, ClientProxyError>)?
@concurrent func removeUserStatus() async -> Result<Void, ClientProxyError> {
removeUserStatusCallsCountLock.withLock { removeUserStatusUnderlyingCallsCount += 1 }
if let removeUserStatusClosure = removeUserStatusClosure {
return await removeUserStatusClosure()
} else {
return removeUserStatusReturnValue
}
}
//MARK: - linkNewDeviceService
private let linkNewDeviceServiceCallsCountLock = NSLock()
@@ -79,6 +79,8 @@ private extension RoomMember {
self.init(userId: proxy.userID,
displayName: proxy.displayName,
avatarUrl: proxy.avatarURL?.absoluteString,
status: proxy.status.raw?.rustValue,
call: proxy.status.call?.rustValue,
membership: proxy.membership,
isNameAmbiguous: proxy.disambiguatedDisplayName != proxy.displayName,
powerLevel: proxy.powerLevel.rustPowerLevel,
@@ -44,18 +44,18 @@ extension UserProfile {
nonisolated extension UserStatus {
static var mockCall: UserStatus {
.init(userSet: nil, call: .init(startDate: nil))
.init(raw: nil, call: .init(joinedDate: nil))
}
static var mockFocussing: UserStatus {
.init(userSet: .init(text: "Focussing", emoji: "🧑‍💻"), call: nil)
.init(raw: .init(text: "Focussing", emoji: "🧑‍💻"), call: nil)
}
static var mockHoliday: UserStatus {
.init(userSet: .init(text: "Holiday", emoji: "🏝️"), call: nil)
.init(raw: .init(text: "Holiday", emoji: "🏝️"), call: nil)
}
static func mock(text: String, emoji: Character) -> UserStatus {
.init(userSet: .init(text: text, emoji: emoji), call: nil)
.init(raw: .init(text: text, emoji: emoji), call: nil)
}
}