Listen to events so that encryption icon updates when status changes (#28407)
* listen to events so that encryption icon updates when status changes * remove debugging message
This commit is contained in:
parent
4f8e9eb9ac
commit
ed9795137b
2 changed files with 86 additions and 11 deletions
|
@ -6,21 +6,40 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
|
|||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { MatrixClient, Room } from "matrix-js-sdk/src/matrix";
|
||||
import { useEffect, useState } from "react";
|
||||
import { CryptoEvent, MatrixClient, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { throttle } from "lodash";
|
||||
|
||||
import { E2EStatus, shieldStatusForRoom } from "../utils/ShieldUtils";
|
||||
import { useTypedEventEmitter } from "./useEventEmitter";
|
||||
|
||||
export function useEncryptionStatus(client: MatrixClient, room: Room): E2EStatus | null {
|
||||
const [e2eStatus, setE2eStatus] = useState<E2EStatus | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (client.getCrypto()) {
|
||||
shieldStatusForRoom(client, room).then((e2eStatus) => {
|
||||
setE2eStatus(e2eStatus);
|
||||
});
|
||||
}
|
||||
}, [client, room]);
|
||||
const updateEncryptionStatus = useMemo(
|
||||
() =>
|
||||
throttle(
|
||||
() => {
|
||||
if (client.getCrypto()) {
|
||||
shieldStatusForRoom(client, room).then((e2eStatus) => {
|
||||
setE2eStatus(e2eStatus);
|
||||
});
|
||||
}
|
||||
},
|
||||
250,
|
||||
{ leading: true, trailing: true },
|
||||
),
|
||||
[client, room],
|
||||
);
|
||||
|
||||
useEffect(updateEncryptionStatus, [updateEncryptionStatus]);
|
||||
|
||||
// shieldStatusForRoom depends on the room membership, each member's trust
|
||||
// status for each member, and each member's devices, so we update the
|
||||
// status whenever any of those changes.
|
||||
useTypedEventEmitter(room, RoomStateEvent.Members, updateEncryptionStatus);
|
||||
useTypedEventEmitter(client, CryptoEvent.UserTrustStatusChanged, updateEncryptionStatus);
|
||||
useTypedEventEmitter(client, CryptoEvent.DevicesUpdated, updateEncryptionStatus);
|
||||
|
||||
return e2eStatus;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue