mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Revert "Show room member role changes in the timeline." (#2573)
Until we can handle filtering Rust side, this causes more issues than its worth.
This commit is contained in:
@@ -683,6 +683,7 @@ class ClientProxy: ClientProxyProtocol {
|
||||
.roomHistoryVisibility,
|
||||
.roomJoinRules,
|
||||
.roomPinnedEvents,
|
||||
.roomPowerLevels,
|
||||
.roomServerAcl,
|
||||
.roomTombstone,
|
||||
.spaceChild,
|
||||
|
||||
@@ -151,10 +151,6 @@ struct RoomStateEventStringBuilder {
|
||||
case (nil, true):
|
||||
return L10n.stateEventRoomNameRemovedByYou
|
||||
}
|
||||
case .roomPowerLevels(let users, let previous):
|
||||
let newRoles = users.compactMap { userRoleChanged(userID: $0.key, powerLevel: $0.value, previous: previous?[$0.key]) }
|
||||
guard !newRoles.isEmpty else { return nil }
|
||||
return newRoles.formatted(.list(type: .and))
|
||||
case .roomThirdPartyInvite(let displayName):
|
||||
guard let displayName else {
|
||||
MXLog.error("roomThirdPartyInvite undisplayable due to missing name.")
|
||||
@@ -177,6 +173,8 @@ struct RoomStateEventStringBuilder {
|
||||
case (nil, true):
|
||||
return L10n.stateEventRoomTopicRemovedByYou
|
||||
}
|
||||
case .roomPowerLevels: // Long term we might show only the user changes, but we need an SDK filter to fix read receipts in that case.
|
||||
break
|
||||
case .policyRuleRoom, .policyRuleServer, .policyRuleUser: // No strings available.
|
||||
break
|
||||
case .roomAliases, .roomCanonicalAlias: // Doesn't provide the alias.
|
||||
@@ -198,26 +196,4 @@ struct RoomStateEventStringBuilder {
|
||||
MXLog.verbose("Filtering timeline item for state: \(state)")
|
||||
return nil
|
||||
}
|
||||
|
||||
private func userRoleChanged(userID: String, powerLevel: Int64, previous: Int64?) -> String? {
|
||||
let previous = previous ?? 0 // TODO: Include the previous default in the SDK item.
|
||||
|
||||
let role = suggestedRoleForPowerLevel(powerLevel: powerLevel)
|
||||
let previousRole = suggestedRoleForPowerLevel(powerLevel: previous)
|
||||
guard role != previousRole else { return nil }
|
||||
|
||||
let isPromotion = powerLevel > previous
|
||||
return switch (role, isPromotion) {
|
||||
case (.user, false):
|
||||
L10n.stateEventDemotedToMember(userID)
|
||||
case (.moderator, true):
|
||||
L10n.stateEventPromotedToModerator(userID)
|
||||
case (.moderator, false):
|
||||
L10n.stateEventDemotedToModerator(userID)
|
||||
case (.administrator, true):
|
||||
L10n.stateEventPromotedToAdministrator(userID)
|
||||
default:
|
||||
nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,93 +89,4 @@ class RoomStateEventStringBuilderTests: XCTestCase {
|
||||
memberIsYou: sender.id == userID)
|
||||
XCTAssertEqual(string, expectedString)
|
||||
}
|
||||
|
||||
// MARK: - User Power Levels
|
||||
|
||||
let aliceID = "@alice"
|
||||
let bobID = "@bob"
|
||||
|
||||
func testUserPowerLevelsPromotion() {
|
||||
var string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: suggestedPowerLevelForRole(role: .moderator)],
|
||||
previous: [aliceID: suggestedPowerLevelForRole(role: .user)]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventPromotedToModerator(aliceID))
|
||||
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: suggestedPowerLevelForRole(role: .administrator)],
|
||||
previous: [aliceID: suggestedPowerLevelForRole(role: .user)]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventPromotedToAdministrator(aliceID))
|
||||
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: suggestedPowerLevelForRole(role: .administrator)],
|
||||
previous: [aliceID: suggestedPowerLevelForRole(role: .moderator)]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventPromotedToAdministrator(aliceID))
|
||||
}
|
||||
|
||||
func testUserPowerLevelsDemotion() {
|
||||
var string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: suggestedPowerLevelForRole(role: .moderator)],
|
||||
previous: [aliceID: suggestedPowerLevelForRole(role: .administrator)]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventDemotedToModerator(aliceID))
|
||||
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: suggestedPowerLevelForRole(role: .user)],
|
||||
previous: [aliceID: suggestedPowerLevelForRole(role: .administrator)]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventDemotedToMember(aliceID))
|
||||
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: suggestedPowerLevelForRole(role: .user)],
|
||||
previous: [aliceID: suggestedPowerLevelForRole(role: .moderator)]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventDemotedToMember(aliceID))
|
||||
}
|
||||
|
||||
func testMultipleUserPowerLevels() {
|
||||
let new = [aliceID: suggestedPowerLevelForRole(role: .administrator),
|
||||
bobID: suggestedPowerLevelForRole(role: .user)]
|
||||
let previous = [aliceID: suggestedPowerLevelForRole(role: .user),
|
||||
bobID: suggestedPowerLevelForRole(role: .moderator)]
|
||||
let string = stringBuilder.buildString(for: .roomPowerLevels(users: new, previous: previous),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string?.contains(L10n.stateEventPromotedToAdministrator(aliceID)), true)
|
||||
XCTAssertEqual(string?.contains(L10n.stateEventDemotedToMember(bobID)), true)
|
||||
}
|
||||
|
||||
func testInvalidUserPowerLevels() {
|
||||
// Admin demotions aren't relevant.
|
||||
var string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: 100],
|
||||
previous: [aliceID: 200]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertNil(string)
|
||||
|
||||
// User promotions aren't relevant.
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: 0],
|
||||
previous: [aliceID: -100]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertNil(string)
|
||||
|
||||
// Or more generally, any change within the same role isn't relevant either.
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: [aliceID: 75],
|
||||
previous: [aliceID: 60]),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertNil(string)
|
||||
|
||||
let new = [aliceID: 100,
|
||||
bobID: suggestedPowerLevelForRole(role: .user)]
|
||||
let previous = [aliceID: 200,
|
||||
bobID: suggestedPowerLevelForRole(role: .moderator)]
|
||||
string = stringBuilder.buildString(for: .roomPowerLevels(users: new, previous: previous),
|
||||
sender: TimelineItemSender(id: ""),
|
||||
isOutgoing: false)
|
||||
XCTAssertEqual(string, L10n.stateEventDemotedToMember(bobID))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Stop showing that a user's role has changed in the room timeline.
|
||||
Reference in New Issue
Block a user