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"],
- "",
+ ""
);
}}
/>