From b7ea67fb8f890ccfdda9f8093ba0c086b048997e 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 card --- 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 2d951cf6..73e53920 100644 --- a/app/client/api-client/types.gen.ts +++ b/app/client/api-client/types.gen.ts @@ -4005,6 +4005,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...") : "—"}

+