fix file delete bugs
This commit is contained in:
parent
3ea33f7203
commit
a56aa08a66
@ -62,7 +62,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Login Error", "登录错误"),
|
||||
("Successful", "成功"),
|
||||
("Connected, waiting for image...", "已连接,等待画面传输..."),
|
||||
("Name", "文件名"),
|
||||
("Name", "名称"),
|
||||
("Type", "类型"),
|
||||
("Modified", "修改时间"),
|
||||
("Size", "大小"),
|
||||
|
@ -62,7 +62,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Login Error", "Eraro de konektado"),
|
||||
("Successful", "Sukceso"),
|
||||
("Connected, waiting for image...", "Konektita, atendante bildon..."),
|
||||
("Name", "Nomo de dosiero"),
|
||||
("Name", "Nomo"),
|
||||
("Type", ""),
|
||||
("Modified", "Modifita"),
|
||||
("Size", "Grandeco"),
|
||||
|
@ -62,7 +62,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Login Error", "Erreur de connexion"),
|
||||
("Successful", "Succès"),
|
||||
("Connected, waiting for image...", "Connecté, en attente de transmission d'image..."),
|
||||
("Name", "Nom du fichier"),
|
||||
("Name", "Nom"),
|
||||
("Type", "Taper"),
|
||||
("Modified", "Modifié"),
|
||||
("Size", "Taille"),
|
||||
|
@ -120,7 +120,8 @@ class JobTable: Reactor.Component {
|
||||
is_remote: is_remote });
|
||||
this.job_map[id] = this.jobs[this.jobs.length - 1];
|
||||
handler.send_files(id, path, to, show_hidden, is_remote);
|
||||
this.update();
|
||||
var self = this;
|
||||
self.timer(30ms, function() { self.update(); });
|
||||
}
|
||||
|
||||
function addDelDir(path, is_remote) {
|
||||
@ -128,19 +129,70 @@ class JobTable: Reactor.Component {
|
||||
jobIdCounter += 1;
|
||||
this.jobs.push({ type: "del-dir", id: id, path: path, is_remote: is_remote });
|
||||
this.job_map[id] = this.jobs[this.jobs.length - 1];
|
||||
handler.remove_dir_all(id, path, is_remote);
|
||||
this.update();
|
||||
}
|
||||
|
||||
function addDelFile(path, is_remote) {
|
||||
var id = jobIdCounter;
|
||||
jobIdCounter += 1;
|
||||
this.jobs.push({ type: "del-file", id: id, path: path, is_remote: is_remote });
|
||||
this.job_map[id] = this.jobs[this.jobs.length - 1];
|
||||
this.update();
|
||||
}
|
||||
|
||||
function confirmDeletePolling(is_remote) {
|
||||
for(var i=0;i<this.jobs.length;++i){
|
||||
var job = this.jobs[i];
|
||||
if(job.confirmed){
|
||||
continue;
|
||||
}
|
||||
if(job.type == "del-file"){
|
||||
confirmDelete(job.id, job.path, job.is_remote);
|
||||
job.confirmed = true;
|
||||
return;
|
||||
}else if (job.type == "del-dir"){
|
||||
handler.remove_dir_all(job.id, job.path, job.is_remote);
|
||||
job.confirmed = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// polling finish
|
||||
if (is_remote) file_transfer.remote_folder_view.table.resetCurrent();
|
||||
else file_transfer.local_folder_view.table.resetCurrent();
|
||||
}
|
||||
|
||||
function cancelDeletePolling() {
|
||||
for(var i=0;i<this.jobs.length;++i){
|
||||
var job = this.jobs[i];
|
||||
if(job.confirmed){
|
||||
continue;
|
||||
}
|
||||
// set confirmed true, prevent other polling action
|
||||
if(job.type == "del-file" || job.type == "del-dir"){
|
||||
job.confirmed = true;
|
||||
job.err = "cancel"
|
||||
}
|
||||
}
|
||||
this.update();
|
||||
}
|
||||
|
||||
function getSvg(job) {
|
||||
if (job.type == "transfer") {
|
||||
return svg_send;
|
||||
} else if (job.type == "del-dir") {
|
||||
} else if (job.type == "del-dir" || job.type == "del-file") {
|
||||
return svg_trash;
|
||||
}
|
||||
}
|
||||
|
||||
function getStatus(job) {
|
||||
if (job.type == "del-file"){
|
||||
if (job.err) {
|
||||
if (job.err == "cancel") return translate("Cancel");
|
||||
} else {
|
||||
if (job.finished) return translate("Finished");
|
||||
else return translate("Waiting");
|
||||
}
|
||||
}
|
||||
if (!job.entries) return translate("Waiting");
|
||||
var i = job.file_num + 1;
|
||||
var n = job.num_entries || job.entries.length;
|
||||
@ -167,6 +219,13 @@ class JobTable: Reactor.Component {
|
||||
|
||||
function updateJobStatus(id, file_num = -1, err = null, speed = null, finished_size = 0) {
|
||||
var job = this.job_map[id];
|
||||
if (job.type == "del-file"){
|
||||
job.finished = true;
|
||||
job.err = err;
|
||||
refreshDir(job.is_remote);
|
||||
this.updateJob(job);
|
||||
return;
|
||||
}
|
||||
if (!job) return;
|
||||
if (file_num < job.file_num) return;
|
||||
job.file_num = file_num;
|
||||
@ -422,14 +481,12 @@ class FolderView : Reactor.Component {
|
||||
}
|
||||
this.history = new_history;
|
||||
if (type == 1) {
|
||||
delete_dirs.push(path);
|
||||
file_transfer.job_table.addDelDir(path, this.is_remote);
|
||||
} else {
|
||||
confirmDelete(path, this.is_remote);
|
||||
file_transfer.job_table.addDelFile(path, this.is_remote);
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < delete_dirs.length; ++i) {
|
||||
file_transfer.job_table.addDelDir(delete_dirs[i], this.is_remote);
|
||||
}
|
||||
file_transfer.job_table.confirmDeletePolling(this.is_remote);
|
||||
}
|
||||
|
||||
event click $(.add-folder) () {
|
||||
@ -567,7 +624,7 @@ handler.jobProgress = function(id, file_num, speed, finished_size) {
|
||||
}
|
||||
|
||||
handler.jobDone = function(id, file_num = -1) {
|
||||
var job = deleting_single_file_jobs[id] || create_dir_jobs[id];
|
||||
var job = create_dir_jobs[id];
|
||||
if (job) {
|
||||
refreshDir(job.is_remote);
|
||||
return;
|
||||
@ -600,17 +657,23 @@ function refreshDir(is_remote) {
|
||||
var deleting_single_file_jobs = {};
|
||||
var create_dir_jobs = {}
|
||||
|
||||
function confirmDelete(path, is_remote) {
|
||||
function confirmDelete(id ,path, is_remote) {
|
||||
msgbox("custom-skip", "Confirm Delete", "<div .form> \
|
||||
<div>" + translate('Are you sure you want to delete this file?') + "</div> \
|
||||
<div.ellipsis style=\"font-weight: bold;\">" + path + "</div> \
|
||||
</div>", function(res=null) {
|
||||
if (res) {
|
||||
handler.remove_file(jobIdCounter, path, 0, is_remote);
|
||||
if (!res) {
|
||||
file_transfer.job_table.updateJobStatus(id, -1, "cancel");
|
||||
file_transfer.job_table.cancelDeletePolling();
|
||||
} else if (res.skip) {
|
||||
file_transfer.job_table.updateJobStatus(id, -1, "cancel");
|
||||
file_transfer.job_table.confirmDeletePolling(is_remote);
|
||||
} else {
|
||||
handler.remove_file(id, path, 0, is_remote);
|
||||
if (is_remote) file_transfer.remote_folder_view.table.resetCurrent();
|
||||
else file_transfer.local_folder_view.table.resetCurrent();
|
||||
deleting_single_file_jobs[jobIdCounter] = { is_remote: is_remote, path: path };
|
||||
jobIdCounter += 1;
|
||||
deleting_single_file_jobs[id] = { is_remote: is_remote, path: path };
|
||||
file_transfer.job_table.confirmDeletePolling(is_remote);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -626,19 +689,30 @@ handler.confirmDeleteFiles = function(id, i, name) {
|
||||
msgbox("custom-skip", "Confirm Delete", "<div .form> \
|
||||
<div>" + translate('Deleting') + " #" + (i + 1) + " / " + n + " " + translate('files') + ".</div> \
|
||||
<div>" + translate('Are you sure you want to delete this file?') + "</div> \
|
||||
<div.ellipsis style=\"font-weight: bold;\" .text>" + name + "</div> \
|
||||
<div.ellipsis style=\"font-weight: bold;\" .text>" + file_path + "</div> \
|
||||
<div><button|checkbox(remember) {ts}>" + translate('Do this for all conflicts') + "</button></div> \
|
||||
</div>", function(res=null) {
|
||||
if (!res) {
|
||||
jt.updateJobStatus(id, i - 1, "cancel");
|
||||
file_transfer.job_table.cancelDeletePolling();
|
||||
} else if (res.skip) {
|
||||
if (res.remember) jt.updateJobStatus(id, i, "cancel");
|
||||
else handler.jobDone(id, i);
|
||||
if (res.remember){
|
||||
jt.updateJobStatus(id, i, "cancel");
|
||||
} else{
|
||||
handler.jobDone(id, i);
|
||||
}
|
||||
file_transfer.job_table.confirmDeletePolling(job.is_remote);
|
||||
} else {
|
||||
job.no_confirm = res.remember;
|
||||
if (job.no_confirm) handler.set_no_confirm(id);
|
||||
if (job.no_confirm){
|
||||
handler.set_no_confirm(id);
|
||||
file_transfer.job_table.confirmDeletePolling(job.is_remote);
|
||||
}
|
||||
handler.remove_file(id, file_path, i, job.is_remote);
|
||||
}
|
||||
if(i+1 >= n){
|
||||
file_transfer.job_table.confirmDeletePolling(job.is_remote);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -45,11 +45,11 @@ class Grid: Behavior {
|
||||
}
|
||||
|
||||
function resetCurrent() {
|
||||
var prev = this.getCurrentRow();
|
||||
if (prev)
|
||||
{
|
||||
prev.state.current = false; // drop state flag
|
||||
prev.state.checked = false; // drop state flag
|
||||
var rows = this.getCurrentRows();
|
||||
for (var i = 0; i < rows.length; ++i) {
|
||||
var row = rows[i];
|
||||
row.state.current = false;
|
||||
row.state.checked = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -145,6 +145,7 @@ class MsgboxComponent: Reactor.Component {
|
||||
var values = this.getValues();
|
||||
values.skip = true;
|
||||
if (this.callback) this.callback(values);
|
||||
if (this.close) this.close();
|
||||
}
|
||||
|
||||
event click $(button#submit) {
|
||||
@ -164,7 +165,7 @@ class MsgboxComponent: Reactor.Component {
|
||||
var self = this;
|
||||
var err = this.callback(values, function(a=1, b='') { self.show_progress(a, b); });
|
||||
if (!err) {
|
||||
this.close();
|
||||
if (this.close) this.close();
|
||||
return;
|
||||
}
|
||||
if (err && err.trim()) this.show_progress(false, err);
|
||||
|
Loading…
Reference in New Issue
Block a user