diff --git a/internal/api/downloadhandler.go b/internal/api/downloadhandler.go index a8ead3c6..af5989ed 100644 --- a/internal/api/downloadhandler.go +++ b/internal/api/downloadhandler.go @@ -55,7 +55,12 @@ func NewDownloadHandler(oplog *oplog.OpLog) http.Handler { w.Header().Set("Content-Type", "application/gzip") w.Header().Set("Content-Transfer-Encoding", "binary") - gzw, _ := gzip.NewWriterLevel(w, gzip.BestSpeed) + gzw, err := gzip.NewWriterLevel(w, gzip.BestSpeed) + if err != nil { + zap.S().Errorf("error creating gzip writer: %v", err) + http.Error(w, "error creating gzip writer", http.StatusInternalServerError) + return + } if err := tarDirectory(gzw, fullPath); err != nil { zap.S().Errorf("error creating tar archive: %v", err) http.Error(w, "error creating tar archive", http.StatusInternalServerError) diff --git a/webui/src/components/OperationRow.tsx b/webui/src/components/OperationRow.tsx index c1371602..622fc084 100644 --- a/webui/src/components/OperationRow.tsx +++ b/webui/src/components/OperationRow.tsx @@ -157,7 +157,7 @@ export const OperationRow = ({ }} > - , + ); }} > @@ -232,15 +232,17 @@ export const OperationRow = ({ ); } else if (operation.op.case === "operationRestore") { const restore = operation.op.value; + const progress = Math.round((details.percentage || 0) * 1000) / 10; + const st = restore.status! || {}; + body = ( <> Restore {restore.path} to {restore.target} {details.percentage !== undefined ? ( - + ) : null} {operation.status == OperationStatus.STATUS_SUCCESS ? ( <> -
) : null} + + + Bytes Done/Total +
+ {formatBytes(Number(st.bytesRestored))}/ + {formatBytes(Number(st.totalBytes))} + + + Files Done/Total +
+ {Number(st.filesRestored)}/{Number(st.totalFiles)} + +
); } else if (operation.op.case === "operationRunHook") { @@ -281,7 +296,7 @@ export const OperationRow = ({ {details.state ? details.state + ": " : null} {displayMessage} - , + ); } @@ -366,7 +381,7 @@ const BackupOperationStatus = ({ const st = status.entry.value; const progress = Math.round( - (Number(st.bytesDone) / Math.max(Number(st.totalBytes), 1)) * 1000, + (Number(st.bytesDone) / Math.max(Number(st.totalBytes), 1)) * 1000 ) / 10; return ( <> @@ -514,7 +529,7 @@ const BigOperationDataVerbatim = ({ logref }: { logref: string }) => { .getLogs( new LogDataRequest({ ref: logref, - }), + }) ) .then((resp) => { setOutput(new TextDecoder("utf-8").decode(resp.value)); diff --git a/webui/src/views/SettingsModal.tsx b/webui/src/views/SettingsModal.tsx index 8585050b..859e6c0c 100644 --- a/webui/src/views/SettingsModal.tsx +++ b/webui/src/views/SettingsModal.tsx @@ -70,7 +70,7 @@ export const SettingsModal = () => { if (!newConfig.auth?.users && !newConfig.auth?.disabled) { throw new Error( - "At least one user must be configured or authentication must be disabled", + "At least one user must be configured or authentication must be disabled" ); } @@ -127,7 +127,7 @@ export const SettingsModal = () => {

)} - + { onFocus={() => { form.setFieldValue( ["auth", "users", index, "needsBcrypt"], - true, + true ); form.setFieldValue( ["auth", "users", index, "passwordBcrypt"], - "", + "" ); }} />