From 8e24c6a8d8fd7677c938e5aa890c3f7e9e1e2c4c Mon Sep 17 00:00:00 2001 From: bcrooker Date: Sun, 1 Mar 2026 21:11:48 -0500 Subject: [PATCH] feat(backups): show estimated time remaining on backup progress --- app/client/api-client/types.gen.ts | 1 + .../modules/backups/components/backup-progress-card.tsx | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/app/client/api-client/types.gen.ts b/app/client/api-client/types.gen.ts index 4e107974..ad7ab3ea 100644 --- a/app/client/api-client/types.gen.ts +++ b/app/client/api-client/types.gen.ts @@ -4141,6 +4141,7 @@ export type GetBackupProgressResponses = { repositoryName: string; scheduleId: string; seconds_elapsed: number; + seconds_remaining: number; total_bytes: number; total_files: number; volumeName: string; diff --git a/app/client/modules/backups/components/backup-progress-card.tsx b/app/client/modules/backups/components/backup-progress-card.tsx index 053ac28d..4e9734b0 100644 --- a/app/client/modules/backups/components/backup-progress-card.tsx +++ b/app/client/modules/backups/components/backup-progress-card.tsx @@ -46,6 +46,9 @@ export const BackupProgressCard = ({ scheduleShortId, initialProgress }: Props) const currentFile = progress?.current_files?.[0] || ""; const fileName = currentFile.split("/").pop() || currentFile; const speed = progress ? formatBytes(progress.bytes_done / progress.seconds_elapsed) : null; + const eta = progress?.seconds_remaining != null && progress.seconds_remaining > 0 + ? formatDuration(progress.seconds_remaining) + : null; return ( @@ -96,6 +99,10 @@ export const BackupProgressCard = ({ scheduleShortId, initialProgress }: Props) {progress ? (progress.seconds_elapsed > 0 ? `${speed?.text} ${speed?.unit}/s` : "Calculating...") : "—"}

+
+

ETA

+

{progress ? (eta ?? "Calculating...") : "—"}

+