Adapt Membership usage for the change to an enum KnownMembership

This commit is contained in:
Andy Balaam 2024-03-12 14:52:54 +00:00
parent da99bad7b9
commit 34559d2a89
115 changed files with 764 additions and 593 deletions

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import { uniq } from "lodash";
import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { Optional } from "matrix-events-sdk";
@ -172,7 +172,7 @@ export default class DMRoomMap {
const joinedRooms = commonRooms
.map((r) => this.matrixClient.getRoom(r))
.filter((r) => r && r.getMyMembership() === Membership.Join);
.filter((r) => r && r.getMyMembership() === KnownMembership.Join);
return joinedRooms[0];
}

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { MatrixError, MatrixClient, EventType, HistoryVisibility } from "matrix-js-sdk/src/matrix";
import { MatrixError, MatrixClient, EventType, HistoryVisibility, KnownMembership } from "matrix-js-sdk/src/matrix";
import { defer, IDeferred } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
@ -159,17 +159,17 @@ export default class MultiInviter {
if (!room) throw new Error("Room not found");
const member = room.getMember(addr);
if (member?.membership === Membership.Join) {
if (member?.membership === KnownMembership.Join) {
throw new MatrixError({
errcode: USER_ALREADY_JOINED,
error: "Member already joined",
});
} else if (member?.membership === Membership.Invite) {
} else if (member?.membership === KnownMembership.Invite) {
throw new MatrixError({
errcode: USER_ALREADY_INVITED,
error: "Member already invited",
});
} else if (member?.membership === Membership.Ban) {
} else if (member?.membership === KnownMembership.Ban) {
let proceed = false;
// Check if we can unban the invitee.
// See https://spec.matrix.org/v1.7/rooms/v10/#authorization-rules, particularly 4.5.3 and 4.5.4.
@ -177,8 +177,8 @@ export default class MultiInviter {
if (
!!ourMember &&
member.powerLevel < ourMember.powerLevel &&
room.currentState.hasSufficientPowerLevelFor(Membership.Ban, ourMember.powerLevel) &&
room.currentState.hasSufficientPowerLevelFor(Membership.Kick, ourMember.powerLevel)
room.currentState.hasSufficientPowerLevelFor("ban", ourMember.powerLevel) &&
room.currentState.hasSufficientPowerLevelFor("kick", ourMember.powerLevel)
) {
const { finished } = Modal.createDialog(ConfirmUserActionDialog, {
member,

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import { Room, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { inviteUsersToRoom } from "../RoomInvite";
@ -68,8 +68,8 @@ export async function upgradeRoom(
let toInvite: string[] = [];
if (inviteUsers) {
toInvite = [
...room.getMembersWithMembership(Membership.Join),
...room.getMembersWithMembership(Membership.Invite),
...room.getMembersWithMembership(KnownMembership.Join),
...room.getMembersWithMembership(KnownMembership.Invite),
]
.map((m) => m.userId)
.filter((m) => m !== cli.getUserId());

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import { groupBy, mapValues, maxBy, minBy, sumBy, takeRight } from "lodash";
import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { KnownMembership, MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix";
import { Member } from "./direct-messages";
import DMRoomMap from "./DMRoomMap";
@ -52,7 +52,7 @@ function joinedRooms(cli: MatrixClient): Room[] {
return (
cli
.getRooms()
.filter((r) => r.getMyMembership() === Membership.Join)
.filter((r) => r.getMyMembership() === KnownMembership.Join)
// Skip low priority rooms and DMs
.filter((r) => !DMRoomMap.shared().getUserIdForRoomId(r.roomId))
.filter((r) => !Object.keys(r.tags).includes("m.lowpriority"))

View file

@ -17,7 +17,14 @@ limitations under the License.
import { base32 } from "rfc4648";
import { IWidget, IWidgetData } from "matrix-widget-api";
import { Room, ClientEvent, MatrixClient, RoomStateEvent, MatrixEvent } from "matrix-js-sdk/src/matrix";
import {
Room,
ClientEvent,
MatrixClient,
RoomStateEvent,
MatrixEvent,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import { CallType } from "matrix-js-sdk/src/webrtc/call";
import { randomString, randomLowercaseString, randomUppercaseString } from "matrix-js-sdk/src/randomstring";
@ -83,7 +90,7 @@ export default class WidgetUtils {
return false;
}
if (room.getMyMembership() !== Membership.Join) {
if (room.getMyMembership() !== KnownMembership.Join) {
logger.warn(`User ${me} is not in room ${roomId}`);
return false;
}

View file

@ -15,7 +15,13 @@ limitations under the License.
*/
import { MEGOLM_ALGORITHM } from "matrix-js-sdk/src/crypto/olmlib";
import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix";
import {
EventType,
KNOWN_SAFE_ROOM_VERSION,
KnownMembership,
MatrixClient,
MatrixEvent,
} from "matrix-js-sdk/src/matrix";
import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom";
import { determineCreateRoomEncryptionOption, Member } from "../../../src/utils/direct-messages";
@ -76,7 +82,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
type: EventType.RoomMember,
content: {
displayname: userId,
membership: MembershipJoin,
membership: KnownMembership.Join,
},
state_key: userId,
user_id: userId,
@ -93,7 +99,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
content: {
displayname: target.name,
avatar_url: target.getMxcAvatarUrl() ?? undefined,
membership: Membership.Invite,
membership: KnownMembership.Invite,
isDirect: true,
},
state_key: target.userId,
@ -108,7 +114,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
content: {
displayname: target.name,
avatar_url: target.getMxcAvatarUrl() ?? undefined,
membership: Membership.Join,
membership: KnownMembership.Join,
},
state_key: target.userId,
sender: target.userId,
@ -118,7 +124,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
});
localRoom.targets = targets;
localRoom.updateMyMembership(Membership.Join);
localRoom.updateMyMembership(KnownMembership.Join);
localRoom.addLiveEvents(events);
localRoom.currentState.setStateEvents(events);
localRoom.name = localRoom.getDefaultRoomName(client.getUserId()!);

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { MatrixClient, Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix";
import DMRoomMap from "../DMRoomMap";
import { isLocalRoom } from "../localRoom/isLocalRoom";
@ -42,7 +42,7 @@ function extractSuitableRoom(rooms: Room[], userId: string, findRoomWithThirdpar
// a DM is a room of two people that contains those two people exactly. This does mean
// that bots, assistants, etc will ruin a room's DM-ness, though this is a problem for
// canonical DMs to solve.
if (r && r.getMyMembership() === Membership.Join) {
if (r && r.getMyMembership() === KnownMembership.Join) {
if (isLocalRoom(r)) return false;
const functionalUsers = getFunctionalMembers(r);

View file

@ -14,7 +14,16 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { Room, RoomMember, RoomState, RoomStateEvent, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix";
import {
Room,
RoomMember,
RoomState,
RoomStateEvent,
MatrixEvent,
MatrixClient,
Membership,
KnownMembership,
} from "matrix-js-sdk/src/matrix";
import { MatrixClientPeg } from "../MatrixClientPeg";
import SettingsStore from "../settings/SettingsStore";
@ -66,11 +75,11 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit {
}
export function getEffectiveMembership(membership: Membership): EffectiveMembership {
if (membership === Membership.Invite) {
if (membership === KnownMembership.Invite) {
return EffectiveMembership.Invite;
} else if (
membership === Membership.Join ||
(SettingsStore.getValue("feature_ask_to_join") && membership === Membership.Knock)
membership === KnownMembership.Join ||
(SettingsStore.getValue("feature_ask_to_join") && membership === KnownMembership.Knock)
) {
return EffectiveMembership.Join;
} else {
@ -84,7 +93,7 @@ export function isKnockDenied(room: Room): boolean | undefined {
const member = memberId ? room.getMember(memberId) : null;
const previousMembership = member?.events.member?.getPrevContent().membership;
return member?.isKicked() && previousMembership === Membership.Knock;
return member?.isKicked() && previousMembership === KnownMembership.Knock;
}
export function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership {

View file

@ -16,7 +16,7 @@ limitations under the License.
import isIp from "is-ip";
import * as utils from "matrix-js-sdk/src/utils";
import { Room, MatrixClient, RoomStateEvent, EventType } from "matrix-js-sdk/src/matrix";
import { Room, MatrixClient, RoomStateEvent, EventType, KnownMembership } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import MatrixToPermalinkConstructor, {
@ -178,7 +178,7 @@ export class RoomPermalinkCreator {
const entries = Object.entries(users);
const allowedEntries = entries.filter(([userId]) => {
const member = this.room?.getMember(userId);
if (!member || member.membership !== Membership.Join) {
if (!member || member.membership !== KnownMembership.Join) {
return false;
}
const serverName = getServerName(userId);

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { JoinRule, Room } from "matrix-js-sdk/src/matrix";
import { JoinRule, KnownMembership, Room } from "matrix-js-sdk/src/matrix";
import { shouldShowComponent } from "../../customisations/helpers/UIComponents";
import { UIComponent } from "../../settings/UIFeature";
@ -29,5 +29,5 @@ export function canInviteTo(room: Room): boolean {
const canInvite =
!!room.canInvite(client.getSafeUserId()) || !!(room.isSpaceRoom() && room.getJoinRule() === JoinRule.Public);
return canInvite && room.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers);
return canInvite && room.getMyMembership() === KnownMembership.Join && shouldShowComponent(UIComponent.InviteUsers);
}

View file

@ -15,7 +15,7 @@ limitations under the License.
*/
import React from "react";
import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule } from "matrix-js-sdk/src/matrix";
import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix";
import { calculateRoomVia } from "./permalinks/Permalinks";
import Modal from "../Modal";
@ -40,7 +40,7 @@ import { SdkContextClass } from "../contexts/SDKContext";
export const shouldShowSpaceSettings = (space: Room): boolean => {
const userId = space.client.getUserId()!;
return (
space.getMyMembership() === Membership.Join &&
space.getMyMembership() === KnownMembership.Join &&
(space.currentState.maySendStateEvent(EventType.RoomAvatar, userId) ||
space.currentState.maySendStateEvent(EventType.RoomName, userId) ||
space.currentState.maySendStateEvent(EventType.RoomTopic, userId) ||
@ -85,7 +85,7 @@ export const showCreateNewRoom = async (space: Room, type?: RoomType): Promise<b
};
export const shouldShowSpaceInvite = (space: Room): boolean =>
((space?.getMyMembership() === Membership.Join && space.canInvite(space.client.getUserId()!)) ||
((space?.getMyMembership() === KnownMembership.Join && space.canInvite(space.client.getUserId()!)) ||
space.getJoinRule() === JoinRule.Public) &&
shouldShowComponent(UIComponent.InviteUsers);