From eea85b9b5add642d9c3ecec043bd4c4f0dc8208a Mon Sep 17 00:00:00 2001 From: Starccy <452276725@qq.com> Date: Sun, 17 Oct 2021 21:27:10 +0800 Subject: [PATCH 1/2] send & receive multiple files --- src/ui/file_transfer.css | 10 ++++++++++ src/ui/file_transfer.tis | 32 ++++++++++++++++++++++++++++---- src/ui/grid.tis | 5 +++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/ui/file_transfer.css b/src/ui/file_transfer.css index 8acde0623..d1e1a4072 100644 --- a/src/ui/file_transfer.css +++ b/src/ui/file_transfer.css @@ -30,6 +30,7 @@ table > thead { } table > tbody { + behavior: select-multiple; overflow-y: scroll-indicator; size: *; background: white; @@ -85,6 +86,15 @@ table.has_current tr:current /* current row */ background-color: color(accent); } +table.has_current tbody tr:checked +{ + background-color: color(accent); +} + +table.has_current tbody tr:checked td { + color: highlighttext; +} + table td { padding: 4px; diff --git a/src/ui/file_transfer.tis b/src/ui/file_transfer.tis index da980d3cd..700efbdd2 100644 --- a/src/ui/file_transfer.tis +++ b/src/ui/file_transfer.tis @@ -25,6 +25,12 @@ var svg_computer = ; +const TYPE_DIR = 1; +const TYPE_DIR_LINK = 2; +const TYPE_DIR_DRIVE = 3; +const TYPE_FILE = 4; +const TYPE_FILE_LINK = 5; + function getSize(type, size) { if (!size) { if (type <= 3) return ""; @@ -374,7 +380,7 @@ class FolderView : Reactor.Component { path = this.joinPath(entry.name); } var tm = entry.time ? new Date(entry.time.toFloat() * 1000.).toLocaleString() : 0; - return + return {entry.name} {tm || ""} @@ -463,10 +469,28 @@ class FolderView : Reactor.Component { return [this.joinPath(name), type]; } + function getCurrentRows() { + var rows = this.table.getCurrentRows(); + if (!rows || rows.length== 0) return; + + var records = new Array(); + + for (var i = 0; i < rows.length; ++i) { + var name = rows[i][1].text; + if (!name || name == "..") continue; + + var type = rows[i][0].attributes["type"]; + records.push([this.joinPath(name), type]); + } + return records; + } + event click $(.send) () { - var cur = this.getCurrentRow(); - if (!cur) return; - file_transfer.job_table.send(cur[0], this.is_remote); + var rows = this.getCurrentRows(); + if (!rows || rows.length == 0) return; + for (var i = 0; i < rows.length; ++i) { + file_transfer.job_table.send(rows[i][0], this.is_remote); + } } event change $(.select-dir) (_, el) { diff --git a/src/ui/grid.tis b/src/ui/grid.tis index cb5932678..f33b4ef35 100644 --- a/src/ui/grid.tis +++ b/src/ui/grid.tis @@ -24,6 +24,11 @@ class Grid: Behavior { { return this.$(tbody>tr:current); } + + function getCurrentRows() + { + return this.$$(tbody>tr:checked); + } function getCurrentColumn() { From fb126164ef6b4f1f30a4b46f17abdc253c55eb2c Mon Sep 17 00:00:00 2001 From: Starccy <452276725@qq.com> Date: Sun, 17 Oct 2021 21:50:34 +0800 Subject: [PATCH 2/2] use multiple jobs to delete --- src/ui/common.tis | 4 ++++ src/ui/file_transfer.tis | 41 +++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/ui/common.tis b/src/ui/common.tis index 316def2d4..6af29ab02 100644 --- a/src/ui/common.tis +++ b/src/ui/common.tis @@ -257,6 +257,10 @@ handler.msgbox = function(type, title, text, callback=null, height=180, width=50 self.timer(150ms, function() { msgbox(type, title, text, callback, height, width, retry); }); } +handler.block_msgbox = function(type, title, text, callback=null, height=180, width=500, retry=0) { + msgbox(type, title, text, callback, height, width, retry); +} + var reconnectTimeout = 1; handler.msgbox_retry = function(type, title, text, hasRetry, callback=null, height=180, width=500) { handler.msgbox(type, title, text, callback, height, width, hasRetry ? reconnectTimeout : 0); diff --git a/src/ui/file_transfer.tis b/src/ui/file_transfer.tis index 700efbdd2..74eaf2b69 100644 --- a/src/ui/file_transfer.tis +++ b/src/ui/file_transfer.tis @@ -407,20 +407,31 @@ class FolderView : Reactor.Component { } event click $(.trash) () { - var row = this.getCurrentRow(); - if (!row) return; - var path = row[0]; - var type = row[1]; - var new_history = []; - for (var i = 0; i < this.history.length; ++i) { - var h = this.history[i]; - if ((h + this.sep()).indexOf(path + this.sep()) == -1) new_history.push(h); + var rows = this.getCurrentRows(); + if (!rows || rows.length == 0) return; + + var delete_dirs = new Array(); + + for (var i = 0; i < rows.length; ++i) { + var row = rows[i]; + + var path = row[0]; + var type = row[1]; + + var new_history = []; + for (var j = 0; j < this.history.length; ++j) { + var h = this.history[j]; + if ((h + this.sep()).indexOf(path + this.sep()) == -1) new_history.push(h); + } + this.history = new_history; + if (type == 1) { + delete_dirs.push(path); + } else { + confirmDelete(path, this.is_remote); + } } - this.history = new_history; - if (type == 1) { - file_transfer.job_table.addDelDir(path, this.is_remote); - } else { - confirmDelete(path, this.is_remote); + for (var i = 0; i < delete_dirs.length; ++i) { + file_transfer.job_table.addDelDir(delete_dirs[i], this.is_remote); } } @@ -594,7 +605,7 @@ var deleting_single_file_jobs = {}; var create_dir_jobs = {} function confirmDelete(path, is_remote) { - handler.msgbox("custom-skip", "Confirm Delete", "
\ + handler.block_msgbox("custom-skip", "Confirm Delete", "
\
Are you sure you want to delete this file?
\ " + path + "
\
", function(res=null) { @@ -614,7 +625,7 @@ handler.confirmDeleteFiles = function(id, i, name) { if (i >= n) return; var file_path = job.path; if (name) file_path += handler.get_path_sep(job.is_remote) + name; - handler.msgbox("custom-skip", "Confirm Delete", "
\ + handler.block_msgbox("custom-skip", "Confirm Delete", "
\
Deleting #" + (i + 1) + " of " + n + " files.
\
Are you sure you want to delete this file?
\ " + name + "
\