Fixes to ensure account data values do not go stale (#9331)

* Fixes to ensure account data values do not go stale

* Remove unneeded cli.off

* fix test
This commit is contained in:
Germain 2022-09-29 20:05:06 +01:00 committed by GitHub
parent 3c5ff30177
commit 3e076c8246
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 2 deletions

View file

@ -401,6 +401,8 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
}
}
private get cli(): MatrixClient { return MatrixClientPeg.get(); }
public componentDidMount(): void {
window.addEventListener("resize", this.onWindowResized);
}
@ -1258,8 +1260,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
this.themeWatcher.recheck();
StorageManager.tryPersistStorage();
const cli = MatrixClientPeg.get();
createLocalNotificationSettingsIfNeeded(cli);
this.cli.on(ClientEvent.Sync, this.onInitialSync);
if (
MatrixClientPeg.currentUserIsJustRegistered() &&
@ -1287,6 +1288,14 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
}
}
private onInitialSync = (): void => {
if (this.cli.isInitialSyncComplete()) {
this.cli.off(ClientEvent.Sync, this.onInitialSync);
}
createLocalNotificationSettingsIfNeeded(this.cli);
};
private async onShowPostLoginScreen(useCase?: UseCase) {
if (useCase) {
PosthogAnalytics.instance.setProperty("ftueUseCaseSelection", useCase);

View file

@ -16,10 +16,12 @@ limitations under the License.
import { useCallback, useContext, useEffect, useState } from "react";
import {
ClientEvent,
IMyDevice,
IPusher,
LOCAL_NOTIFICATION_SETTINGS_PREFIX,
MatrixClient,
MatrixEvent,
PUSHER_DEVICE_ID,
PUSHER_ENABLED,
} from "matrix-js-sdk/src/matrix";
@ -32,6 +34,7 @@ import { LocalNotificationSettings } from "matrix-js-sdk/src/@types/local_notifi
import MatrixClientContext from "../../../../contexts/MatrixClientContext";
import { _t } from "../../../../languageHandler";
import { DevicesDictionary, DeviceWithVerification } from "./types";
import { useEventEmitter } from "../../../../hooks/useEventEmitter";
const isDeviceVerified = (
matrixClient: MatrixClient,
@ -161,6 +164,16 @@ export const useOwnDevices = (): DevicesState => {
refreshDevices();
}, [refreshDevices]);
useEventEmitter(matrixClient, ClientEvent.AccountData, (event: MatrixEvent): void => {
const type = event.getType();
if (type.startsWith(LOCAL_NOTIFICATION_SETTINGS_PREFIX.name)) {
const newSettings = new Map(localNotificationSettings);
const deviceId = type.slice(type.lastIndexOf(".") + 1);
newSettings.set(deviceId, event.getContent<LocalNotificationSettings>());
setLocalNotificationSettings(newSettings);
}
});
const isCurrentDeviceVerified = !!devices[currentDeviceId]?.isVerified;
const requestDeviceVerification = isCurrentDeviceVerified && userId