Introduce Membership type
This commit is contained in:
parent
3c6fd58628
commit
da99bad7b9
115 changed files with 582 additions and 526 deletions
|
@ -172,7 +172,7 @@ export default class DMRoomMap {
|
|||
|
||||
const joinedRooms = commonRooms
|
||||
.map((r) => this.matrixClient.getRoom(r))
|
||||
.filter((r) => r && r.getMyMembership() === "join");
|
||||
.filter((r) => r && r.getMyMembership() === Membership.Join);
|
||||
|
||||
return joinedRooms[0];
|
||||
}
|
||||
|
|
|
@ -159,17 +159,17 @@ export default class MultiInviter {
|
|||
if (!room) throw new Error("Room not found");
|
||||
|
||||
const member = room.getMember(addr);
|
||||
if (member?.membership === "join") {
|
||||
if (member?.membership === Membership.Join) {
|
||||
throw new MatrixError({
|
||||
errcode: USER_ALREADY_JOINED,
|
||||
error: "Member already joined",
|
||||
});
|
||||
} else if (member?.membership === "invite") {
|
||||
} else if (member?.membership === Membership.Invite) {
|
||||
throw new MatrixError({
|
||||
errcode: USER_ALREADY_INVITED,
|
||||
error: "Member already invited",
|
||||
});
|
||||
} else if (member?.membership === "ban") {
|
||||
} else if (member?.membership === Membership.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("ban", ourMember.powerLevel) &&
|
||||
room.currentState.hasSufficientPowerLevelFor("kick", ourMember.powerLevel)
|
||||
room.currentState.hasSufficientPowerLevelFor(Membership.Ban, ourMember.powerLevel) &&
|
||||
room.currentState.hasSufficientPowerLevelFor(Membership.Kick, ourMember.powerLevel)
|
||||
) {
|
||||
const { finished } = Modal.createDialog(ConfirmUserActionDialog, {
|
||||
member,
|
||||
|
|
|
@ -67,7 +67,10 @@ export async function upgradeRoom(
|
|||
|
||||
let toInvite: string[] = [];
|
||||
if (inviteUsers) {
|
||||
toInvite = [...room.getMembersWithMembership("join"), ...room.getMembersWithMembership("invite")]
|
||||
toInvite = [
|
||||
...room.getMembersWithMembership(Membership.Join),
|
||||
...room.getMembersWithMembership(Membership.Invite),
|
||||
]
|
||||
.map((m) => m.userId)
|
||||
.filter((m) => m !== cli.getUserId());
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ function joinedRooms(cli: MatrixClient): Room[] {
|
|||
return (
|
||||
cli
|
||||
.getRooms()
|
||||
.filter((r) => r.getMyMembership() === "join")
|
||||
.filter((r) => r.getMyMembership() === Membership.Join)
|
||||
// Skip low priority rooms and DMs
|
||||
.filter((r) => !DMRoomMap.shared().getUserIdForRoomId(r.roomId))
|
||||
.filter((r) => !Object.keys(r.tags).includes("m.lowpriority"))
|
||||
|
|
|
@ -83,7 +83,7 @@ export default class WidgetUtils {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (room.getMyMembership() !== "join") {
|
||||
if (room.getMyMembership() !== Membership.Join) {
|
||||
logger.warn(`User ${me} is not in room ${roomId}`);
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
|
|||
type: EventType.RoomMember,
|
||||
content: {
|
||||
displayname: userId,
|
||||
membership: "join",
|
||||
membership: MembershipJoin,
|
||||
},
|
||||
state_key: userId,
|
||||
user_id: userId,
|
||||
|
@ -93,7 +93,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
|
|||
content: {
|
||||
displayname: target.name,
|
||||
avatar_url: target.getMxcAvatarUrl() ?? undefined,
|
||||
membership: "invite",
|
||||
membership: Membership.Invite,
|
||||
isDirect: true,
|
||||
},
|
||||
state_key: target.userId,
|
||||
|
@ -108,7 +108,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
|
|||
content: {
|
||||
displayname: target.name,
|
||||
avatar_url: target.getMxcAvatarUrl() ?? undefined,
|
||||
membership: "join",
|
||||
membership: Membership.Join,
|
||||
},
|
||||
state_key: target.userId,
|
||||
sender: target.userId,
|
||||
|
@ -118,7 +118,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[])
|
|||
});
|
||||
|
||||
localRoom.targets = targets;
|
||||
localRoom.updateMyMembership("join");
|
||||
localRoom.updateMyMembership(Membership.Join);
|
||||
localRoom.addLiveEvents(events);
|
||||
localRoom.currentState.setStateEvents(events);
|
||||
localRoom.name = localRoom.getDefaultRoomName(client.getUserId()!);
|
||||
|
|
|
@ -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() === "join") {
|
||||
if (r && r.getMyMembership() === Membership.Join) {
|
||||
if (isLocalRoom(r)) return false;
|
||||
|
||||
const functionalUsers = getFunctionalMembers(r);
|
||||
|
|
|
@ -65,10 +65,13 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit {
|
|||
return split;
|
||||
}
|
||||
|
||||
export function getEffectiveMembership(membership: string): EffectiveMembership {
|
||||
if (membership === "invite") {
|
||||
export function getEffectiveMembership(membership: Membership): EffectiveMembership {
|
||||
if (membership === Membership.Invite) {
|
||||
return EffectiveMembership.Invite;
|
||||
} else if (membership === "join" || (SettingsStore.getValue("feature_ask_to_join") && membership === "knock")) {
|
||||
} else if (
|
||||
membership === Membership.Join ||
|
||||
(SettingsStore.getValue("feature_ask_to_join") && membership === Membership.Knock)
|
||||
) {
|
||||
return EffectiveMembership.Join;
|
||||
} else {
|
||||
// Probably a leave, kick, or ban
|
||||
|
@ -81,7 +84,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 === "knock";
|
||||
return member?.isKicked() && previousMembership === Membership.Knock;
|
||||
}
|
||||
|
||||
export function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership {
|
||||
|
@ -90,7 +93,7 @@ export function getEffectiveMembershipTag(room: Room, membership?: string): Effe
|
|||
: getEffectiveMembership(membership ?? room.getMyMembership());
|
||||
}
|
||||
|
||||
export function isJoinedOrNearlyJoined(membership: string): boolean {
|
||||
export function isJoinedOrNearlyJoined(membership: Membership): boolean {
|
||||
const effective = getEffectiveMembership(membership);
|
||||
return effective === EffectiveMembership.Join || effective === EffectiveMembership.Invite;
|
||||
}
|
||||
|
|
|
@ -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 !== "join") {
|
||||
if (!member || member.membership !== Membership.Join) {
|
||||
return false;
|
||||
}
|
||||
const serverName = getServerName(userId);
|
||||
|
|
|
@ -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() === "join" && shouldShowComponent(UIComponent.InviteUsers);
|
||||
return canInvite && room.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers);
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ import { SdkContextClass } from "../contexts/SDKContext";
|
|||
export const shouldShowSpaceSettings = (space: Room): boolean => {
|
||||
const userId = space.client.getUserId()!;
|
||||
return (
|
||||
space.getMyMembership() === "join" &&
|
||||
space.getMyMembership() === Membership.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() === "join" && space.canInvite(space.client.getUserId()!)) ||
|
||||
((space?.getMyMembership() === Membership.Join && space.canInvite(space.client.getUserId()!)) ||
|
||||
space.getJoinRule() === JoinRule.Public) &&
|
||||
shouldShowComponent(UIComponent.InviteUsers);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue