Fix upload queuing
This commit is contained in:
parent
fb186c1c73
commit
a029b2e902
149
static/script.js
149
static/script.js
|
@ -16,6 +16,7 @@ let t9n =
|
||||||
size_unit : " Mio",
|
size_unit : " Mio",
|
||||||
of : " de ",
|
of : " de ",
|
||||||
upload_sent_count_msg : " éléments envoyés",
|
upload_sent_count_msg : " éléments envoyés",
|
||||||
|
item_queued : "Synchronisation en attente...",
|
||||||
},
|
},
|
||||||
en : {
|
en : {
|
||||||
statusDefault : "Searching network for live hosts...",
|
statusDefault : "Searching network for live hosts...",
|
||||||
|
@ -27,6 +28,7 @@ let t9n =
|
||||||
size_unit : " MB",
|
size_unit : " MB",
|
||||||
of : " of ",
|
of : " of ",
|
||||||
upload_sent_count_msg : " elements transferred.",
|
upload_sent_count_msg : " elements transferred.",
|
||||||
|
item_queued : "Queued for file synchronisation...",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// Timeline drag and drop elements default attributes
|
// Timeline drag and drop elements default attributes
|
||||||
|
@ -38,7 +40,9 @@ window.currentUser = {
|
||||||
status_all : t9n[LOCALE].statusDefault,
|
status_all : t9n[LOCALE].statusDefault,
|
||||||
medias_status : {},
|
medias_status : {},
|
||||||
freeze_timeline_update : 0,
|
freeze_timeline_update : 0,
|
||||||
|
freeze_ul : 0,
|
||||||
last_ul_host : 0,
|
last_ul_host : 0,
|
||||||
|
ul_queue : [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -436,6 +440,36 @@ function update_host_list(infos_array){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function freeze_ui_host(host, html_attributes, inner_html=0, inner_text=0){
|
||||||
|
// Add an overlay element to freeze part of the UI
|
||||||
|
// html_attributes, inner_html are objects with structure {"id":, 0 "class": 0, "attr" : "value", }
|
||||||
|
let container_element = document.getElementById(host);
|
||||||
|
let siblings = container_element.children;
|
||||||
|
// Upload dialog container / background
|
||||||
|
let upload_dialog_cont_element = add_HTML_element("div", html_attributes, 0, host);
|
||||||
|
container_element.insertBefore(upload_dialog_cont_element, siblings[0]);
|
||||||
|
if (inner_html){
|
||||||
|
let child_node = add_HTML_element("div", inner_html, 0, host)
|
||||||
|
let new_node = container_element.children.item(html_attributes.id + host).appendChild(child_node);
|
||||||
|
if (inner_text){
|
||||||
|
new_node.innerText = inner_text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function freeze_queued_container(command){
|
||||||
|
freeze_attributes = {"id":"ul_queued_freeze_", "class": "ul_queued_freeze"};
|
||||||
|
inner_html = {"id":"ul_queued_msg_", "class": "ul_queued_msg"};
|
||||||
|
inner_text = t9n[LOCALE].item_queued;
|
||||||
|
freeze_ui_host(command.split("/")[2], freeze_attributes, inner_html, inner_text);
|
||||||
|
}
|
||||||
|
|
||||||
|
function unfreeze_queued_container(host){
|
||||||
|
let container = document.getElementById(host);
|
||||||
|
let exists = container.querySelector("div.ul_queued_freeze");
|
||||||
|
exists? exists.remove(): false;
|
||||||
|
}
|
||||||
|
|
||||||
function display_upload_status(command) {
|
function display_upload_status(command) {
|
||||||
// TODO : First this should set the HTMl with empty values, then call update_upload...
|
// TODO : First this should set the HTMl with empty values, then call update_upload...
|
||||||
let host = command.split("/")[2];
|
let host = command.split("/")[2];
|
||||||
|
@ -487,37 +521,55 @@ function destroy_upload_status(host) {
|
||||||
let container_element = document.getElementById(host);
|
let container_element = document.getElementById(host);
|
||||||
let ul_cont_exists = document.getElementById("ul_dialog_cont_" + host);
|
let ul_cont_exists = document.getElementById("ul_dialog_cont_" + host);
|
||||||
if ( ul_cont_exists != undefined) {
|
if ( ul_cont_exists != undefined) {
|
||||||
|
// Remove ul dialog
|
||||||
container_element.removeChild(ul_cont_exists);
|
container_element.removeChild(ul_cont_exists);
|
||||||
|
// Clear update callback
|
||||||
clearTimeout(currentUser["ul_timeout_" + host]);
|
clearTimeout(currentUser["ul_timeout_" + host]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function update_upload_status(current_upload) {
|
async function update_upload_status(current_upload) {
|
||||||
//~ console.log("Updating upload status...");
|
|
||||||
//~ console.log(current_upload);
|
|
||||||
if (current_upload.status == -1){
|
if (current_upload.status == -1){
|
||||||
console.log("Destroying dialog..." + currentUser.last_ul_host);
|
// Upload finished
|
||||||
|
console.log("Upload finished - Destroying dialog for " + currentUser.last_ul_host);
|
||||||
destroy_upload_status(currentUser.last_ul_host);
|
destroy_upload_status(currentUser.last_ul_host);
|
||||||
|
// Remove first item from command queue
|
||||||
|
currentUser.ul_queue.shift();
|
||||||
|
// Upload done, un-freeze
|
||||||
|
currentUser.freeze_ul = 0;
|
||||||
|
// Call sync_host() again
|
||||||
|
setTimeout(sync_host, 1000);
|
||||||
|
|
||||||
} else if (current_upload.status) {
|
} else if (current_upload.status) {
|
||||||
//~ console.log("Filling dialog...");
|
unfreeze_queued_container(currentUser.last_ul_host);
|
||||||
document.getElementById("ul_dialog_cont_" + current_upload.host).style.display = "block";
|
// Upload in progress
|
||||||
|
console.log("Updating dialog...");
|
||||||
|
//document.getElementById("ul_dialog_cont_" + current_upload.host).style.display = "block";
|
||||||
|
document.getElementById("ul_dialog_cont_" + currentUser.last_ul_host).style.display = "block";
|
||||||
// Fill table
|
// Fill table
|
||||||
document.getElementById("ul_status_progress_cnt_" + current_upload.host).innerHTML = current_upload.progress + " / " + current_upload.total_count + t9n[LOCALE].upload_sent_count_msg;
|
document.getElementById("ul_status_progress_cnt_" + currentUser.last_ul_host).innerHTML = current_upload.progress + " / " + current_upload.total_count + t9n[LOCALE].upload_sent_count_msg;
|
||||||
document.getElementById("ul_status_progress_size_" + current_upload.host).innerHTML = current_upload.transferred_size + t9n[LOCALE].size_unit + t9n[LOCALE].of + current_upload.total_size + t9n[LOCALE].size_unit;
|
document.getElementById("ul_status_progress_size_" + currentUser.last_ul_host).innerHTML = current_upload.transferred_size + t9n[LOCALE].size_unit + t9n[LOCALE].of + current_upload.total_size + t9n[LOCALE].size_unit;
|
||||||
document.getElementById("ul_status_filename_" + current_upload.host).innerHTML = t9n[LOCALE].filename + ": " + current_upload.filename;
|
document.getElementById("ul_status_filename_" + currentUser.last_ul_host).innerHTML = t9n[LOCALE].filename + ": " + current_upload.filename;
|
||||||
document.getElementById("ul_status_filesize_" + current_upload.host).innerHTML = t9n[LOCALE].size + ": " + current_upload.size + t9n[LOCALE].size_unit;
|
document.getElementById("ul_status_filesize_" + currentUser.last_ul_host).innerHTML = t9n[LOCALE].size + ": " + current_upload.size + t9n[LOCALE].size_unit;
|
||||||
// Progress bar CSS
|
// Progress bar CSS
|
||||||
if (current_upload.transferred_percent) {
|
if (current_upload.transferred_percent) {
|
||||||
document.getElementById("ul_progress_" + current_upload.host).innerText = current_upload.transferred_percent + "%";
|
document.getElementById("ul_progress_" + currentUser.last_ul_host).innerText = current_upload.transferred_percent + "%";
|
||||||
document.getElementById("ul_progress_" + current_upload.host).style.background = "linear-gradient(90deg, " + TIMELINE_COLOR_CURSOR + " " + current_upload.transferred_percent + "%, #fff " + current_upload.transferred_percent + "%)";
|
document.getElementById("ul_progress_" + currentUser.last_ul_host).style.background = "linear-gradient(90deg, " + TIMELINE_COLOR_CURSOR + " " + current_upload.transferred_percent + "%, #fff " + current_upload.transferred_percent + "%)";
|
||||||
}
|
}
|
||||||
currentUser["ul_timeout_" + current_upload.host] = setTimeout(send_ajax_cmd, 3000, `/sync/${current_upload.host}/status`);
|
// Update status callback
|
||||||
|
currentUser["ul_timeout_" + currentUser.last_ul_host] = setTimeout(send_ajax_cmd, 1000, `/sync/${currentUser.last_ul_host}/status`);
|
||||||
} else {
|
} else {
|
||||||
//~ console.log("requesting status data");
|
// Upload is starting
|
||||||
currentUser.last_ul_host = current_upload.host;
|
console.log("Requesting data to update dialog for " + currentUser.last_ul_host);
|
||||||
send_ajax_cmd(`/sync/${current_upload.host}/status`);
|
// Freeze ul cmd
|
||||||
await sleep(500);
|
currentUser.freeze_ul = 1;
|
||||||
|
//~ currentUser.last_ul_host = current_upload.host;
|
||||||
|
// This will end up calling update_upload_status() again, expecting the ul status value to change from 0 to int
|
||||||
|
send_ajax_cmd(`/sync/${currentUser.last_ul_host}/status`);
|
||||||
|
//~ send_ajax_cmd(`/sync/${current_upload.host}/status`);
|
||||||
|
// Wait a bit for response
|
||||||
|
await sleep(200);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,12 +613,12 @@ function parse_result(command, infos_array) {
|
||||||
//~ console.log("stopping upload...");
|
//~ console.log("stopping upload...");
|
||||||
//~ console.log(infos_array);
|
//~ console.log(infos_array);
|
||||||
//~ destroy_upload_status();
|
//~ destroy_upload_status();
|
||||||
} else {
|
} //else {
|
||||||
//~ console.log("displaying status");
|
//~ console.log("displaying status");
|
||||||
//~ console.log(infos_array);
|
//~ console.log(infos_array);
|
||||||
//~ if (infos_array.total_count) {
|
//~ if (infos_array.total_count) {
|
||||||
//~ display_upload_status(infos_array)
|
//~ display_upload_status(infos_array)
|
||||||
}
|
//}
|
||||||
} else {
|
} else {
|
||||||
setTimeout(send_ajax_cmd, 180, "/all/list");
|
setTimeout(send_ajax_cmd, 180, "/all/list");
|
||||||
setTimeout(send_ajax_cmd, 180, "/all/status");
|
setTimeout(send_ajax_cmd, 180, "/all/status");
|
||||||
|
@ -618,6 +670,40 @@ function scan_hosts() {
|
||||||
setTimeout(scan_hosts, currentUser.scan_interval);
|
setTimeout(scan_hosts, currentUser.scan_interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function sync_host() {
|
||||||
|
// If ul is not in progress
|
||||||
|
if (!currentUser.freeze_ul){
|
||||||
|
// If there's something in the queue
|
||||||
|
if (currentUser.ul_queue.length){
|
||||||
|
// Send first command in queue.
|
||||||
|
let command_q = currentUser.ul_queue[0];
|
||||||
|
console.log("Sending command " + command_q);
|
||||||
|
let host = command_q.split("/")[2];
|
||||||
|
// Send ul command
|
||||||
|
send_ajax_cmd(command_q);
|
||||||
|
// Update status
|
||||||
|
currentUser.status_all = t9n[LOCALE].sync;
|
||||||
|
// Create dialog
|
||||||
|
// TODO : display grayed out dialog when host is queued for upload
|
||||||
|
display_upload_status(command_q);
|
||||||
|
// Set current host
|
||||||
|
currentUser.last_ul_host = host;
|
||||||
|
// Send command to update dialog according to upload status
|
||||||
|
// This ends up calling update_upload_status()
|
||||||
|
setTimeout(send_ajax_cmd, 200, command_q + "/status");
|
||||||
|
} else {
|
||||||
|
console.log("Nothing else in the queue !");
|
||||||
|
// Make sure sane values are set back
|
||||||
|
currentUser.last_ul_host = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("UL freezed, waiting a bit...");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// UI
|
// UI
|
||||||
addEventListener("DOMContentLoaded", function() {
|
addEventListener("DOMContentLoaded", function() {
|
||||||
//~ adjust_timeline();
|
//~ adjust_timeline();
|
||||||
|
@ -656,17 +742,30 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
|
|
||||||
} else if ( command.indexOf("/sync/") > -1 ) {
|
} else if ( command.indexOf("/sync/") > -1 ) {
|
||||||
console.log("Sync command detected");
|
console.log("Sync command detected");
|
||||||
currentUser.status_all = t9n[LOCALE].sync;
|
// If command not already in queue, add it
|
||||||
// Display dialog
|
if (!currentUser.ul_queue.includes(command)){
|
||||||
display_upload_status(command);
|
console.log("Queuing command...");
|
||||||
// Request values to fill dialog
|
currentUser.ul_queue.push(command);
|
||||||
//~ request.onload = send_ajax_cmd(command + "/status");
|
freeze_queued_container(command);
|
||||||
setTimeout(send_ajax_cmd, 1000, command + "/status");
|
} else {
|
||||||
|
console.log("Command already in queue...");
|
||||||
|
}
|
||||||
|
sync_host();
|
||||||
|
//~ if (currentUser.ul_queue.length > 1){
|
||||||
|
//~ if (currentUser.freeze_ul){
|
||||||
|
//~ console.log("UL freezed, wait for queue to complete.")
|
||||||
|
// Offload command sending to sync_host()
|
||||||
|
return 1;
|
||||||
|
//~ }
|
||||||
|
//~ currentUser.status_all = t9n[LOCALE].sync;
|
||||||
|
//~ // Display dialog
|
||||||
|
//~ display_upload_status(command);
|
||||||
|
//~ // Request values to fill dialog
|
||||||
|
//~ setTimeout(send_ajax_cmd, 1000, command + "/status");
|
||||||
}
|
}
|
||||||
else if ( command.indexOf("/browse") > -1 ) {
|
else if ( command.indexOf("/browse") > -1 ) {
|
||||||
request.onload = send_ajax_cmd("/all/browse");
|
request.onload = send_ajax_cmd("/all/browse");
|
||||||
}
|
}
|
||||||
|
|
||||||
request.open("GET", command, true);
|
request.open("GET", command, true);
|
||||||
request.send();
|
request.send();
|
||||||
});
|
});
|
||||||
|
|
|
@ -34,6 +34,26 @@ tr:nth-child(2n+1) {background-color: #888;}
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ul_queued_freeze {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #fff8;
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ul_queued_msg {
|
||||||
|
color: #888;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
width: 25%;
|
||||||
|
margin: auto;
|
||||||
|
background: #e6e6e6;
|
||||||
|
height: 100%;
|
||||||
|
padding-top: 5%;
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
.client_container {
|
.client_container {
|
||||||
border-bottom: #222 solid 1px;
|
border-bottom: #222 solid 1px;
|
||||||
display:none;
|
display:none;
|
||||||
|
|
Loading…
Reference in New Issue