Files
cinny/src/app/state/backupRestore.ts
T
Lotus Bot 61a1f008d0 chore: upgrade i18next 26, prettier 3, fontsource-variable, domhandler 6, lint-staged 17
- i18next 23->26 + react-i18next 15->17
- prettier 2->3, reformat all files
- replace @fontsource/inter with @fontsource-variable/inter 5, update import path
- domhandler 5->6 (aligns with transitive deps)
- lint-staged 16->17
2026-05-21 23:30:50 -04:00

71 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,
},
});
}
},
);