diff --git a/src/app/hooks/useDeviceVerificationStatus.ts b/src/app/hooks/useDeviceVerificationStatus.ts index 537e7f5cf9..cfb2006cf6 100644 --- a/src/app/hooks/useDeviceVerificationStatus.ts +++ b/src/app/hooks/useDeviceVerificationStatus.ts @@ -1,11 +1,23 @@ import { useCallback, useEffect, useState } from 'react'; -import type { CryptoApi } from '$types/matrix-sdk'; +import { type CryptoApi, type CryptoEventHandlerMap, CryptoEvent } from '$types/matrix-sdk'; import { verifiedDevice } from '$utils/matrix-crypto'; import { fulfilledPromiseSettledResult } from '$utils/common'; import { useAlive } from './useAlive'; import { useMatrixClient } from './useMatrixClient'; import { useDeviceListChange } from './useDeviceList'; +export const useCrossSigningKeysChange = ( + onChange: CryptoEventHandlerMap[CryptoEvent.KeysChanged] +) => { + const mx = useMatrixClient(); + useEffect(() => { + mx.on(CryptoEvent.KeysChanged, onChange); + return () => { + mx.removeListener(CryptoEvent.KeysChanged, onChange); + }; + }, [mx, onChange]); +}; + export enum VerificationStatus { Unknown, Unverified, @@ -48,6 +60,8 @@ export const useDeviceVerificationDetect = ( [userId, updateStatus] ) ); + + useCrossSigningKeysChange(useCallback(() => updateStatus(), [updateStatus])); }; export const useDeviceVerificationStatus = ( @@ -98,6 +112,8 @@ export const useUnverifiedDeviceCount = ( ) ); + useCrossSigningKeysChange(useCallback(() => updateCount(), [updateCount])); + useEffect(() => { updateCount(); }, [updateCount]);