Add support for device dehydration v2 (#12316)
* rehydrate/dehydrate device if configured in well-known * add handling for dehydrated devices * some fixes * schedule dehydration * improve display of own dehydrated device * created dehydrated device when creating or resetting SSSS * some UI tweaks * reorder strings * lint * remove statement for testing * add playwright test * lint and fix broken test * update to new dehydration API * some fixes from review * try to fix test error * remove unneeded debug line * apply changes from review * add Jest tests * fix typo Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * don't need Object.assign Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> --------- Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
parent
6392759bec
commit
31373399f9
18 changed files with 823 additions and 8 deletions
|
@ -77,6 +77,7 @@ export enum OwnDevicesError {
|
|||
}
|
||||
export type DevicesState = {
|
||||
devices: DevicesDictionary;
|
||||
dehydratedDeviceId?: string;
|
||||
pushers: IPusher[];
|
||||
localNotificationSettings: Map<string, LocalNotificationSettings>;
|
||||
currentDeviceId: string;
|
||||
|
@ -97,6 +98,7 @@ export const useOwnDevices = (): DevicesState => {
|
|||
const userId = matrixClient.getSafeUserId();
|
||||
|
||||
const [devices, setDevices] = useState<DevicesState["devices"]>({});
|
||||
const [dehydratedDeviceId, setDehydratedDeviceId] = useState<DevicesState["dehydratedDeviceId"]>(undefined);
|
||||
const [pushers, setPushers] = useState<DevicesState["pushers"]>([]);
|
||||
const [localNotificationSettings, setLocalNotificationSettings] = useState<
|
||||
DevicesState["localNotificationSettings"]
|
||||
|
@ -131,6 +133,21 @@ export const useOwnDevices = (): DevicesState => {
|
|||
});
|
||||
setLocalNotificationSettings(notificationSettings);
|
||||
|
||||
const ownUserId = matrixClient.getUserId()!;
|
||||
const userDevices = (await matrixClient.getCrypto()?.getUserDeviceInfo([ownUserId]))?.get(ownUserId);
|
||||
const dehydratedDeviceIds: string[] = [];
|
||||
for (const device of userDevices?.values() ?? []) {
|
||||
if (device.dehydrated) {
|
||||
dehydratedDeviceIds.push(device.deviceId);
|
||||
}
|
||||
}
|
||||
// If the user has exactly one device marked as dehydrated, we consider
|
||||
// that as the dehydrated device, and hide it as a normal device (but
|
||||
// indicate that the user is using a dehydrated device). If the user has
|
||||
// more than one, that is anomalous, and we show all the devices so that
|
||||
// nothing is hidden.
|
||||
setDehydratedDeviceId(dehydratedDeviceIds.length == 1 ? dehydratedDeviceIds[0] : undefined);
|
||||
|
||||
setIsLoadingDeviceList(false);
|
||||
} catch (error) {
|
||||
if ((error as MatrixError).httpStatus == 404) {
|
||||
|
@ -228,6 +245,7 @@ export const useOwnDevices = (): DevicesState => {
|
|||
|
||||
return {
|
||||
devices,
|
||||
dehydratedDeviceId,
|
||||
pushers,
|
||||
localNotificationSettings,
|
||||
currentDeviceId,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue