Use MatrixClientPeg::safeGet in src/{stores,hooks,components/structures}/* (#10988)
This commit is contained in:
parent
707fd9ccf0
commit
dd46db4817
34 changed files with 139 additions and 130 deletions
|
@ -32,6 +32,7 @@ import { throttle } from "lodash";
|
|||
import { CryptoEvent } from "matrix-js-sdk/src/crypto";
|
||||
import { RoomType } from "matrix-js-sdk/src/@types/event";
|
||||
import { DecryptionError } from "matrix-js-sdk/src/crypto/algorithms";
|
||||
import { IKeyBackupInfo } from "matrix-js-sdk/src/crypto/keybackup";
|
||||
|
||||
// focus-visible is a Polyfill for the :focus-visible CSS pseudo-attribute used by various components
|
||||
import "focus-visible";
|
||||
|
@ -355,7 +356,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
private async postLoginSetup(): Promise<void> {
|
||||
const cli = MatrixClientPeg.get();
|
||||
const cli = MatrixClientPeg.safeGet();
|
||||
const cryptoEnabled = cli.isCryptoEnabled();
|
||||
if (!cryptoEnabled) {
|
||||
this.onLoggedIn();
|
||||
|
@ -574,11 +575,11 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
if (payload.event_type === "m.identity_server") {
|
||||
const fullUrl = payload.event_content ? payload.event_content["base_url"] : null;
|
||||
if (!fullUrl) {
|
||||
MatrixClientPeg.get().setIdentityServerUrl(undefined);
|
||||
MatrixClientPeg.safeGet().setIdentityServerUrl(undefined);
|
||||
localStorage.removeItem("mx_is_access_token");
|
||||
localStorage.removeItem("mx_is_url");
|
||||
} else {
|
||||
MatrixClientPeg.get().setIdentityServerUrl(fullUrl);
|
||||
MatrixClientPeg.safeGet().setIdentityServerUrl(fullUrl);
|
||||
localStorage.removeItem("mx_is_access_token"); // clear token
|
||||
localStorage.setItem("mx_is_url", fullUrl); // XXX: Do we still need this?
|
||||
}
|
||||
|
@ -625,7 +626,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
this.notifyNewScreen("forgot_password");
|
||||
break;
|
||||
case "start_chat":
|
||||
createRoom(MatrixClientPeg.get(), {
|
||||
createRoom(MatrixClientPeg.safeGet(), {
|
||||
dmUserId: payload.user_id,
|
||||
});
|
||||
break;
|
||||
|
@ -647,7 +648,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
// FIXME: controller shouldn't be loading a view :(
|
||||
const modal = Modal.createDialog(Spinner, undefined, "mx_Dialog_spinner");
|
||||
|
||||
MatrixClientPeg.get()
|
||||
MatrixClientPeg.safeGet()
|
||||
.leave(payload.room_id)
|
||||
.then(
|
||||
() => {
|
||||
|
@ -755,7 +756,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
this.viewSomethingBehindModal();
|
||||
break;
|
||||
case "view_invite": {
|
||||
const room = MatrixClientPeg.get().getRoom(payload.roomId);
|
||||
const room = MatrixClientPeg.safeGet().getRoom(payload.roomId);
|
||||
if (room?.isSpaceRoom()) {
|
||||
showSpaceInvite(room);
|
||||
} else {
|
||||
|
@ -794,7 +795,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
Modal.createDialog(DialPadModal, {}, "mx_Dialog_dialPadWrapper");
|
||||
break;
|
||||
case Action.OnLoggedIn:
|
||||
this.stores.client = MatrixClientPeg.get();
|
||||
this.stores.client = MatrixClientPeg.safeGet();
|
||||
if (
|
||||
// Skip this handling for token login as that always calls onLoggedIn itself
|
||||
!this.tokenLogin &&
|
||||
|
@ -935,7 +936,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
let presentedId = roomInfo.room_alias || roomInfo.room_id!;
|
||||
const room = MatrixClientPeg.get().getRoom(roomInfo.room_id);
|
||||
const room = MatrixClientPeg.safeGet().getRoom(roomInfo.room_id);
|
||||
if (room) {
|
||||
// Not all timeline events are decrypted ahead of time anymore
|
||||
// Only the critical ones for a typical UI are
|
||||
|
@ -1062,14 +1063,14 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
|
||||
const [shouldCreate, opts] = await modal.finished;
|
||||
if (shouldCreate) {
|
||||
createRoom(MatrixClientPeg.get(), opts!);
|
||||
createRoom(MatrixClientPeg.safeGet(), opts!);
|
||||
}
|
||||
}
|
||||
|
||||
private chatCreateOrReuse(userId: string): void {
|
||||
const snakedConfig = new SnakedObject<IConfigOptions>(this.props.config);
|
||||
// Use a deferred action to reshow the dialog once the user has registered
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
if (MatrixClientPeg.safeGet().isGuest()) {
|
||||
// No point in making 2 DMs with welcome bot. This assumes view_set_mxid will
|
||||
// result in a new DM with the welcome user.
|
||||
if (userId !== snakedConfig.get("welcome_user_id")) {
|
||||
|
@ -1098,7 +1099,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
|
||||
// TODO: Immutable DMs replaces this
|
||||
|
||||
const client = MatrixClientPeg.get();
|
||||
const client = MatrixClientPeg.safeGet();
|
||||
const dmRoom = findDMForUser(client, userId);
|
||||
|
||||
if (dmRoom) {
|
||||
|
@ -1116,7 +1117,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
private leaveRoomWarnings(roomId: string): JSX.Element[] {
|
||||
const roomToLeave = MatrixClientPeg.get().getRoom(roomId);
|
||||
const roomToLeave = MatrixClientPeg.safeGet().getRoom(roomId);
|
||||
const isSpace = roomToLeave?.isSpaceRoom();
|
||||
// Show a warning if there are additional complications.
|
||||
const warnings: JSX.Element[] = [];
|
||||
|
@ -1154,7 +1155,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
private leaveRoom(roomId: string): void {
|
||||
const cli = MatrixClientPeg.get();
|
||||
const cli = MatrixClientPeg.safeGet();
|
||||
const roomToLeave = cli.getRoom(roomId);
|
||||
const warnings = this.leaveRoomWarnings(roomId);
|
||||
|
||||
|
@ -1188,8 +1189,8 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
private forgetRoom(roomId: string): void {
|
||||
const room = MatrixClientPeg.get().getRoom(roomId);
|
||||
MatrixClientPeg.get()
|
||||
const room = MatrixClientPeg.safeGet().getRoom(roomId);
|
||||
MatrixClientPeg.safeGet()
|
||||
.forget(roomId)
|
||||
.then(() => {
|
||||
// Switch to home page if we're currently viewing the forgotten room
|
||||
|
@ -1212,7 +1213,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
private async copyRoom(roomId: string): Promise<void> {
|
||||
const roomLink = makeRoomPermalink(MatrixClientPeg.get(), roomId);
|
||||
const roomLink = makeRoomPermalink(MatrixClientPeg.safeGet(), roomId);
|
||||
const success = await copyPlaintext(roomLink);
|
||||
if (!success) {
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
|
@ -1246,7 +1247,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
|
||||
const welcomeUserRooms = DMRoomMap.shared().getDMRoomsForUserId(welcomeUserId);
|
||||
if (welcomeUserRooms.length === 0) {
|
||||
const roomId = await createRoom(MatrixClientPeg.get(), {
|
||||
const roomId = await createRoom(MatrixClientPeg.safeGet(), {
|
||||
dmUserId: snakedConfig.get("welcome_user_id"),
|
||||
// Only view the welcome user if we're NOT looking at a room
|
||||
andView: !this.state.currentRoomId,
|
||||
|
@ -1262,11 +1263,11 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
// the saved sync to be loaded).
|
||||
const saveWelcomeUser = (ev: MatrixEvent): void => {
|
||||
if (ev.getType() === EventType.Direct && ev.getContent()[welcomeUserId]) {
|
||||
MatrixClientPeg.get().store.save(true);
|
||||
MatrixClientPeg.get().removeListener(ClientEvent.AccountData, saveWelcomeUser);
|
||||
MatrixClientPeg.safeGet().store.save(true);
|
||||
MatrixClientPeg.safeGet().removeListener(ClientEvent.AccountData, saveWelcomeUser);
|
||||
}
|
||||
};
|
||||
MatrixClientPeg.get().on(ClientEvent.AccountData, saveWelcomeUser);
|
||||
MatrixClientPeg.safeGet().on(ClientEvent.AccountData, saveWelcomeUser);
|
||||
|
||||
return roomId;
|
||||
}
|
||||
|
@ -1413,7 +1414,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
// Before defaulting to directory, show the last viewed room
|
||||
this.viewLastRoom();
|
||||
} else {
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
if (MatrixClientPeg.safeGet().isGuest()) {
|
||||
dis.dispatch({ action: "view_welcome_page" });
|
||||
} else {
|
||||
dis.dispatch({ action: Action.ViewHomePage });
|
||||
|
@ -1468,7 +1469,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
// to do the first sync
|
||||
this.firstSyncComplete = false;
|
||||
this.firstSyncPromise = defer();
|
||||
const cli = MatrixClientPeg.get();
|
||||
const cli = MatrixClientPeg.safeGet();
|
||||
|
||||
// Allow the JS SDK to reap timeline events. This reduces the amount of
|
||||
// memory consumed as the JS SDK stores multiple distinct copies of room
|
||||
|
@ -1588,7 +1589,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
cli.on(MatrixEventEvent.Decrypted, (e, err) => dft.eventDecrypted(e, err as DecryptionError));
|
||||
|
||||
cli.on(ClientEvent.Room, (room) => {
|
||||
if (MatrixClientPeg.get().isCryptoEnabled()) {
|
||||
if (cli.isCryptoEnabled()) {
|
||||
const blacklistEnabled = SettingsStore.getValueAt(
|
||||
SettingLevel.ROOM_DEVICE,
|
||||
"blacklistUnverifiedDevices",
|
||||
|
@ -1618,15 +1619,15 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
});
|
||||
cli.on(CryptoEvent.KeyBackupFailed, async (errcode): Promise<void> => {
|
||||
let haveNewVersion;
|
||||
let newVersionInfo;
|
||||
let haveNewVersion: boolean | undefined;
|
||||
let newVersionInfo: IKeyBackupInfo | null = null;
|
||||
// if key backup is still enabled, there must be a new backup in place
|
||||
if (MatrixClientPeg.get().getKeyBackupEnabled()) {
|
||||
if (cli.getKeyBackupEnabled()) {
|
||||
haveNewVersion = true;
|
||||
} else {
|
||||
// otherwise check the server to see if there's a new one
|
||||
try {
|
||||
newVersionInfo = await MatrixClientPeg.get().getKeyBackupVersion();
|
||||
newVersionInfo = await cli.getKeyBackupVersion();
|
||||
if (newVersionInfo !== null) haveNewVersion = true;
|
||||
} catch (e) {
|
||||
logger.error("Saw key backup error but failed to check backup version!", e);
|
||||
|
@ -1639,7 +1640,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
import(
|
||||
"../../async-components/views/dialogs/security/NewRecoveryMethodDialog"
|
||||
) as unknown as Promise<typeof NewRecoveryMethodDialog>,
|
||||
{ newVersionInfo },
|
||||
{ newVersionInfo: newVersionInfo! },
|
||||
);
|
||||
} else {
|
||||
Modal.createDialogAsync(
|
||||
|
@ -1686,7 +1687,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
* @private
|
||||
*/
|
||||
private onClientStarted(): void {
|
||||
const cli = MatrixClientPeg.get();
|
||||
const cli = MatrixClientPeg.safeGet();
|
||||
|
||||
if (cli.isCryptoEnabled()) {
|
||||
const blacklistEnabled = SettingsStore.getValueAt(SettingLevel.DEVICE, "blacklistUnverifiedDevices");
|
||||
|
@ -1734,7 +1735,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
params: params,
|
||||
});
|
||||
} else if (screen === "soft_logout") {
|
||||
if (cli.getUserId() && !Lifecycle.isSoftLogout()) {
|
||||
if (!!cli?.getUserId() && !Lifecycle.isSoftLogout()) {
|
||||
// Logged in - visit a room
|
||||
this.viewLastRoom();
|
||||
} else {
|
||||
|
@ -2057,7 +2058,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
{...this.props}
|
||||
{...this.state}
|
||||
ref={this.loggedInView}
|
||||
matrixClient={MatrixClientPeg.get()}
|
||||
matrixClient={MatrixClientPeg.safeGet()}
|
||||
onRegistered={this.onRegistered}
|
||||
currentRoomId={this.state.currentRoomId}
|
||||
/>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue