cinny/src/app/state/backupRestore.ts
Ajay Bura 387ce9c462
upgrade to matrix-js-sdk v37.5.0 (#2327)
* upgrade to js-sdk 37

* fix server crypto wasm locally
2025-05-18 10:53:56 +05:30

70 lines
1.6 KiB
TypeScript

import { atom } from 'jotai';
import { ImportRoomKeyProgressData, ImportRoomKeyStage } from 'matrix-js-sdk/lib/crypto-api';
export enum BackupProgressStatus {
Idle,
Fetching,
Loading,
Done,
}
export type ProgressData = {
downloaded: number;
successes: number;
failures: number;
total: number;
};
export type IBackupProgress =
| {
status: BackupProgressStatus.Idle;
}
| {
status: BackupProgressStatus.Fetching;
}
| {
status: BackupProgressStatus.Loading;
data: ProgressData;
}
| {
status: BackupProgressStatus.Done;
};
const baseBackupRestoreProgressAtom = atom<IBackupProgress>({
status: BackupProgressStatus.Idle,
});
export const backupRestoreProgressAtom = atom<
IBackupProgress,
[ImportRoomKeyProgressData],
undefined
>(
(get) => get(baseBackupRestoreProgressAtom),
(get, set, progress) => {
if (progress.stage === ImportRoomKeyStage.Fetch) {
set(baseBackupRestoreProgressAtom, {
status: BackupProgressStatus.Fetching,
});
return;
}
if (progress.stage === ImportRoomKeyStage.LoadKeys) {
const { total, successes, failures } = progress;
const downloaded = successes + failures;
if (downloaded === total) {
set(baseBackupRestoreProgressAtom, {
status: BackupProgressStatus.Done,
});
return;
}
set(baseBackupRestoreProgressAtom, {
status: BackupProgressStatus.Loading,
data: {
downloaded,
successes,
failures,
total,
},
});
}
}
);