Add the UserStatus and a status field on UserProfile/RoomMember/TimelineItemSender.

This commit is contained in:
Doug
2026-07-10 12:40:14 +01:00
committed by Doug
parent 5743f263b6
commit 2c4775f357
11 changed files with 122 additions and 9 deletions
@@ -10045,6 +10045,11 @@ nonisolated class RoomMemberProxyMock: RoomMemberProxyProtocol, @unchecked Senda
nonisolated(unsafe) var displayName: String?
nonisolated(unsafe) var disambiguatedDisplayName: String?
nonisolated(unsafe) var avatarURL: URL?
var status: UserStatus {
get { return underlyingStatus }
set(value) { underlyingStatus = value }
}
nonisolated(unsafe) var underlyingStatus: UserStatus!
var membership: MembershipState {
get { return underlyingMembership }
set(value) { underlyingMembership = value }
@@ -13,6 +13,7 @@ nonisolated struct RoomMemberProxyMockConfiguration {
var userID: String
var displayName: String?
var avatarURL: URL?
var status = UserStatus()
var membership: MembershipState
var isIgnored = false
@@ -23,14 +24,12 @@ nonisolated struct RoomMemberProxyMockConfiguration {
extension RoomMemberProxyMock {
convenience init(with configuration: RoomMemberProxyMockConfiguration) {
self.init()
userID = configuration.userID
displayName = configuration.displayName
if let displayName = configuration.displayName {
disambiguatedDisplayName = "\(displayName) (\(userID))"
}
disambiguatedDisplayName = configuration.displayName.map { "\($0) (\(userID))" }
avatarURL = configuration.avatarURL
status = configuration.status
membership = configuration.membership
isIgnored = configuration.isIgnored
@@ -93,6 +92,20 @@ extension RoomMemberProxyMock {
membership: .join))
}
static var mockErin: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@erin:matrix.org",
displayName: "Erin",
status: .mockFocussing,
membership: .join))
}
static var mockFrank: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@frank:matrix.org",
displayName: "Frank",
status: .mockCall,
membership: .join))
}
static var mockVerbose: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@charliev:matrix.org",
displayName: "Charlie is the best display name",
+26 -1
View File
@@ -9,7 +9,6 @@
import Foundation
extension UserProfile {
/// Mocks
static var mockAlice: UserProfile {
.init(userID: "@alice:matrix.org", displayName: "Alice", avatarURL: "mxc://matrix.org/UcCimidcvpFvWkPzvjXMQPHA")
}
@@ -30,7 +29,33 @@ extension UserProfile {
.init(userID: "@dan:matrix.org", displayName: "Dan", avatarURL: .mockMXCUserAvatar)
}
static var mockErin: UserProfile {
.init(userID: "@erin:matrix.org", displayName: "Erin", status: .mockFocussing)
}
static var mockFrank: UserProfile {
.init(userID: "@frank:matrix.org", displayName: "Frank", status: .mockCall)
}
static var mockVerbose: UserProfile {
.init(userID: "@charlie:matrix.org", displayName: "Charlie is the best display name", avatarURL: nil)
}
}
nonisolated extension UserStatus {
static var mockCall: UserStatus {
.init(userSet: nil, call: .init(startDate: nil))
}
static var mockFocussing: UserStatus {
.init(userSet: .init(text: "Focussing", emoji: "🧑‍💻"), call: nil)
}
static var mockHoliday: UserStatus {
.init(userSet: .init(text: "Holiday", emoji: "🏝️"), call: nil)
}
static func mock(text: String, emoji: Character) -> UserStatus {
.init(userSet: .init(text: text, emoji: emoji), call: nil)
}
}