From 4f2dee391643c853503d5d6e1020226c3f156806 Mon Sep 17 00:00:00 2001 From: florinm03 <116092053+florinm03@users.noreply.github.com> Date: Mon, 27 Apr 2026 01:09:14 +0200 Subject: [PATCH 1/3] fix: webui safari bug uploadspeed (#695) --- assets/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/index.js b/assets/index.js index fe33786..63ad194 100644 --- a/assets/index.js +++ b/assets/index.js @@ -260,7 +260,9 @@ class Uploader { progress(event) { const now = Date.now(); - const speed = (event.loaded - this.uploaded) / (now - this.lastUptime) * 1000; + const elapsed = now - this.lastUptime; + if (elapsed < 300) return; // throttle update for safari + const speed = (event.loaded - this.uploaded) / (elapsed) * 1000; const [speedValue, speedUnit] = formatFileSize(speed); const speedText = `${speedValue} ${speedUnit}/s`; const progress = formatPercent(((event.loaded + this.uploadOffset) / this.file.size) * 100); From 8e90ffa9c87e5c3ccc3b08cf37061215472aff8c Mon Sep 17 00:00:00 2001 From: sigoden Date: Mon, 27 Apr 2026 08:12:35 +0800 Subject: [PATCH 2/3] refactor: webui file size format (#698) --- assets/index.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/assets/index.js b/assets/index.js index 63ad194..3e01af1 100644 --- a/assets/index.js +++ b/assets/index.js @@ -262,12 +262,12 @@ class Uploader { const now = Date.now(); const elapsed = now - this.lastUptime; if (elapsed < 300) return; // throttle update for safari - const speed = (event.loaded - this.uploaded) / (elapsed) * 1000; + const speed = (event.loaded - this.uploaded) / elapsed * 1000; const [speedValue, speedUnit] = formatFileSize(speed); const speedText = `${speedValue} ${speedUnit}/s`; const progress = formatPercent(((event.loaded + this.uploadOffset) / this.file.size) * 100); const duration = formatDuration((event.total - event.loaded) / speed); - this.$uploadStatus.innerHTML = `${speedText}${progress} ${duration}`; + this.$uploadStatus.innerHTML = `${speedText}${progress} ${duration}`; this.uploaded = event.loaded; this.lastUptime = now; } @@ -937,11 +937,14 @@ function formatFileSize(size) { const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; if (size == 0) return [0, "B"]; const i = parseInt(Math.floor(Math.log(size) / Math.log(1024))); - let ratio = 1; - if (i >= 3) { - ratio = 100; + const raw = size / Math.pow(1024, i); + let value; + if (i > 0 && raw < 999.95) { + value = Math.round(raw * 10) / 10; + } else { + value = Math.round(raw); } - return [Math.round(size * ratio / Math.pow(1024, i), 2) / ratio, sizes[i]]; + return [value, sizes[i]]; } function formatDuration(seconds) { From 82a8865b9f686b58c30071587621b6cc03de578f Mon Sep 17 00:00:00 2001 From: sigoden Date: Thu, 30 Apr 2026 19:55:57 +0800 Subject: [PATCH 3/3] feat: skip directory walking in HEAD requests (#701) --- src/server.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/server.rs b/src/server.rs index cc2fbec..b61224e 100644 --- a/src/server.rs +++ b/src/server.rs @@ -579,7 +579,7 @@ impl Server { res: &mut Response, ) -> Result<()> { let mut paths = vec![]; - if exist { + if !head_only && exist { paths = match self.list_dir(path, path, access_paths.clone()).await { Ok(paths) => paths, Err(_) => { @@ -618,14 +618,15 @@ impl Server { return self .handle_ls_dir(path, true, query_params, head_only, user, access_paths, res) .await; - } else { + } + + if !head_only { let path_buf = path.to_path_buf(); let hidden = Arc::new(self.args.hidden.to_vec()); let search = search.clone(); - let access_paths = access_paths.clone(); let search_paths = tokio::spawn(collect_dir_entries( - access_paths, + access_paths.clone(), self.running.clone(), path_buf, hidden,