forked from github/cinny
fix: permissions and room icon resolution (#2)
* Initialize call state upon room creation for call rooms, remove subsequent useless permission * handle case of missing call permissions * use call icon for room item summary when room is call room * replace previous icon src resolution function with a more robust approach * replace usages of previous icon resolution function with new implementation * fix room name not updating for a while when changed * set up framework for room power level overrides upon room creation * override join call permission to all members upon room creation * fix broken usages of RoomIcon * remove unneeded import * remove unnecessary logic * format with prettier
This commit is contained in:
@@ -11,6 +11,7 @@ import { CreateRoomKind } from './CreateRoomKindSelector';
|
||||
import { RoomType, StateEvent } from '../../../types/matrix/room';
|
||||
import { getViaServers } from '../../plugins/via-servers';
|
||||
import { getMxIdServer } from '../../utils/matrix';
|
||||
import { IPowerLevels } from '../../hooks/usePowerLevels';
|
||||
|
||||
export const createRoomCreationContent = (
|
||||
type: RoomType | undefined,
|
||||
@@ -82,6 +83,44 @@ export const createRoomEncryptionState = () => ({
|
||||
},
|
||||
});
|
||||
|
||||
export const createRoomCallState = () => ({
|
||||
type: 'org.matrix.msc3401.call',
|
||||
state_key: '',
|
||||
content: {},
|
||||
});
|
||||
|
||||
export const createPowerLevelContentOverrides = (
|
||||
base: IPowerLevels,
|
||||
overrides: Partial<IPowerLevels>
|
||||
): IPowerLevels => ({
|
||||
...base,
|
||||
...overrides,
|
||||
...(base.events || overrides.events
|
||||
? {
|
||||
events: {
|
||||
...base.events,
|
||||
...overrides.events,
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
...(base.users || overrides.users
|
||||
? {
|
||||
users: {
|
||||
...base.users,
|
||||
...overrides.users,
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
...(base.notifications || overrides.notifications
|
||||
? {
|
||||
notifications: {
|
||||
...base.notifications,
|
||||
...overrides.notifications,
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
});
|
||||
|
||||
export type CreateRoomData = {
|
||||
version: string;
|
||||
type?: RoomType;
|
||||
@@ -94,6 +133,7 @@ export type CreateRoomData = {
|
||||
knock: boolean;
|
||||
allowFederation: boolean;
|
||||
additionalCreators?: string[];
|
||||
powerLevelContentOverrides?: IPowerLevels;
|
||||
};
|
||||
export const createRoom = async (mx: MatrixClient, data: CreateRoomData): Promise<string> => {
|
||||
const initialState: ICreateRoomStateEvent[] = [];
|
||||
@@ -106,6 +146,10 @@ export const createRoom = async (mx: MatrixClient, data: CreateRoomData): Promis
|
||||
initialState.push(createRoomParentState(data.parent));
|
||||
}
|
||||
|
||||
if (data.type === RoomType.Call) {
|
||||
initialState.push(createRoomCallState());
|
||||
}
|
||||
|
||||
initialState.push(createRoomJoinRulesState(data.kind, data.parent, data.knock));
|
||||
|
||||
const options: ICreateRoomOpts = {
|
||||
@@ -136,5 +180,15 @@ export const createRoom = async (mx: MatrixClient, data: CreateRoomData): Promis
|
||||
);
|
||||
}
|
||||
|
||||
if (data.powerLevelContentOverrides) {
|
||||
const roomPowers = await mx.getStateEvent(result.room_id, StateEvent.RoomPowerLevels, '');
|
||||
const updatedPowers = createPowerLevelContentOverrides(
|
||||
roomPowers,
|
||||
data.powerLevelContentOverrides
|
||||
);
|
||||
|
||||
await mx.sendStateEvent(result.room_id, StateEvent.RoomPowerLevels as any, updatedPowers, '');
|
||||
}
|
||||
|
||||
return result.room_id;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user