mirror of
https://github.com/sigoden/dufs.git
synced 2026-06-07 23:16:54 +03:00
Merge branch 'main' into chore-release
This commit is contained in:
+11
-6
@@ -260,12 +260,14 @@ class Uploader {
|
|||||||
|
|
||||||
progress(event) {
|
progress(event) {
|
||||||
const now = Date.now();
|
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 [speedValue, speedUnit] = formatFileSize(speed);
|
||||||
const speedText = `${speedValue} ${speedUnit}/s`;
|
const speedText = `${speedValue} ${speedUnit}/s`;
|
||||||
const progress = formatPercent(((event.loaded + this.uploadOffset) / this.file.size) * 100);
|
const progress = formatPercent(((event.loaded + this.uploadOffset) / this.file.size) * 100);
|
||||||
const duration = formatDuration((event.total - event.loaded) / speed);
|
const duration = formatDuration((event.total - event.loaded) / speed);
|
||||||
this.$uploadStatus.innerHTML = `<span style="width: 80px;">${speedText}</span><span>${progress} ${duration}</span>`;
|
this.$uploadStatus.innerHTML = `<span style="width: 80px;">${speedText}</span><span style="margin-left: 5px;">${progress} ${duration}</span>`;
|
||||||
this.uploaded = event.loaded;
|
this.uploaded = event.loaded;
|
||||||
this.lastUptime = now;
|
this.lastUptime = now;
|
||||||
}
|
}
|
||||||
@@ -935,11 +937,14 @@ function formatFileSize(size) {
|
|||||||
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
||||||
if (size == 0) return [0, "B"];
|
if (size == 0) return [0, "B"];
|
||||||
const i = parseInt(Math.floor(Math.log(size) / Math.log(1024)));
|
const i = parseInt(Math.floor(Math.log(size) / Math.log(1024)));
|
||||||
let ratio = 1;
|
const raw = size / Math.pow(1024, i);
|
||||||
if (i >= 3) {
|
let value;
|
||||||
ratio = 100;
|
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) {
|
function formatDuration(seconds) {
|
||||||
|
|||||||
+5
-4
@@ -579,7 +579,7 @@ impl Server {
|
|||||||
res: &mut Response,
|
res: &mut Response,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut paths = vec![];
|
let mut paths = vec![];
|
||||||
if exist {
|
if !head_only && exist {
|
||||||
paths = match self.list_dir(path, path, access_paths.clone()).await {
|
paths = match self.list_dir(path, path, access_paths.clone()).await {
|
||||||
Ok(paths) => paths,
|
Ok(paths) => paths,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
@@ -618,14 +618,15 @@ impl Server {
|
|||||||
return self
|
return self
|
||||||
.handle_ls_dir(path, true, query_params, head_only, user, access_paths, res)
|
.handle_ls_dir(path, true, query_params, head_only, user, access_paths, res)
|
||||||
.await;
|
.await;
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if !head_only {
|
||||||
let path_buf = path.to_path_buf();
|
let path_buf = path.to_path_buf();
|
||||||
let hidden = Arc::new(self.args.hidden.to_vec());
|
let hidden = Arc::new(self.args.hidden.to_vec());
|
||||||
let search = search.clone();
|
let search = search.clone();
|
||||||
|
|
||||||
let access_paths = access_paths.clone();
|
|
||||||
let search_paths = tokio::spawn(collect_dir_entries(
|
let search_paths = tokio::spawn(collect_dir_entries(
|
||||||
access_paths,
|
access_paths.clone(),
|
||||||
self.running.clone(),
|
self.running.clone(),
|
||||||
path_buf,
|
path_buf,
|
||||||
hidden,
|
hidden,
|
||||||
|
|||||||
Reference in New Issue
Block a user