From 98ae788eb3e630c3ed8b0fe284f385f108031573 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Fri, 25 Jan 2019 16:14:46 +0100 Subject: [PATCH] luci-app-attendedsysupgrade: new api, unify status to distinguish between installed packages and requested packages, the API call is now "installed" instead of "packages". The clients now decide on their own if they want http or https, therefore the server doesn't reply with full links, only the path. Add missing variable declarations in JavaScript code Fix typos in UI strings Also unify "info_box" and "error_box" to "status_box" Signed-off-by: Paul Spooren --- .../luasrc/view/attendedsysupgrade.htm | 3 +- .../resources/attendedsysupgrade.js | 113 ++++++++---------- 2 files changed, 49 insertions(+), 67 deletions(-) diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm index 0a8c65ebd..c9259559b 100644 --- a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm +++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm @@ -77,8 +77,7 @@
Easily search and install new releases and package upgrades. Sysupgrade firmware are created on demand based on locally installed packages.
- - +

diff --git a/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js index 60f586ded..f4d3d8dc0 100644 --- a/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js +++ b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js @@ -1,14 +1,8 @@ -function $(s) { - return document.getElementById(s.substring(1)); -} +function $(s) { return document.getElementById(s.substring(1)); } -function show(s) { - $(s).style.display = 'block'; -} +function show(s) { $(s).style.display = 'block'; } -function hide(s) { - $(s).style.display = 'none'; -} +function hide(s) { $(s).style.display = 'none'; } function set_server() { hide("#error_box"); @@ -33,13 +27,12 @@ function edit_server() { $("#server").className = ''; $("#server").onclick = null; - button_set = document.createElement("input"); + var button_set = document.createElement("input"); button_set.type = "button"; button_set.value = "Save"; button_set.name = "button_set"; button_set.id = "button_set"; - button_set.className = 'cbi-button cbi-button-edit'; - button_set.style = 'background-image: url("/luci-static/resources/cbi/save.gif");' + button_set.className = 'cbi-button cbi-button-save'; button_set.onclick = set_server $("#server").parentElement.appendChild(button_set); } @@ -61,7 +54,7 @@ function server_request(request_dict, path, callback) { request.setRequestHeader("Content-type", "application/json"); request.send(JSON.stringify(request_dict)); request.onerror = function(e) { - error_box("upgrade server down") + set_status("danger", "upgrade server down") show("#server_div"); } request.addEventListener('load', function(event) { @@ -111,7 +104,7 @@ function ubus_call(command, argument, params, variable) { request_data.id = ubus_counter; request_data.method = "call"; request_data.params = [ data.ubus_rpc_session, command, argument, params ] - request_json = JSON.stringify(request_data) + var request_json = JSON.stringify(request_data) ubus_counter++; var request = new XMLHttpRequest(); request.open("POST", ubus_url, true); @@ -128,7 +121,7 @@ function ubus_call(command, argument, params, variable) { } } } else { - error_box("Ubus call faild:
Request: " + request_json + "
Response: " + JSON.stringify(response)) + set_status("danger", "Ubus call failed:
Request: " + request_json + "
Response: " + JSON.stringify(response)) } ubus_closed++; } @@ -136,22 +129,14 @@ function ubus_call(command, argument, params, variable) { request.send(request_json); } -function info_box(info_output, loading) { - // Shows notification if upgrade is available - // If loading is true then an "processing" animation is added - show("#info_box"); +function set_status(type, message, loading) { + $("#status_box").className = "alert-message " + type; var loading_image = ''; if(loading) { - loading_image = 'Loading'; + loading_image = 'Loading '; } - $("#info_box").innerHTML = loading_image + info_output; -} - -function error_box(error_output) { - // Shows erros in red box - show("#error_box"); - $("#error_box").innerHTML = error_output; - hide("#info_box"); + $("#status_box").innerHTML = loading_image + message; + show("#status_box") } function upgrade_check() { @@ -159,10 +144,11 @@ function upgrade_check() { // If data.upgrade_packages is set to true search for new package versions as well hide("#error_box"); hide("#server_div"); - info_box("Searching for upgrades", true); + set_status("info", "Searching for upgrades", true); var request_dict = {} request_dict.version = data.release.version; - request_dict.packages = data.packages; + request_dict.revision = data.release.revision; + request_dict.installed = data.packages; request_dict.upgrade_packages = data.upgrade_packages server_request(request_dict, "api/upgrade-check", upgrade_check_callback) } @@ -170,7 +156,7 @@ function upgrade_check() { function upgrade_check_callback(request_text) { var request_json = JSON.parse(request_text) - // create simple output to tell user whats going to be upgrade (release/packages) + // create simple output to tell user what's going to be upgrade (release/packages) var info_output = "" if(request_json.version != undefined) { info_output += "

New firmware release available

" @@ -179,12 +165,12 @@ function upgrade_check_callback(request_text) { } if(request_json.upgrades != undefined) { info_output += "

Package upgrades available

" - for (upgrade in request_json.upgrades) { + for (var upgrade in request_json.upgrades) { info_output += "" + upgrade + ": " + request_json.upgrades[upgrade][1] + " to " + request_json.upgrades[upgrade][0] + "
" } } data.packages = request_json.packages - info_box(info_output) + set_status("success", info_output) if(data.advanced_mode == 1) { show("#edit_button"); @@ -201,7 +187,7 @@ function upgrade_request() { // Request the image // Needed values // version/release - // board_name or model (server tries to find the corrent profile) + // board_name or model (server tries to find the correct profile) // packages // The rest is added by server_request() $("#upgrade_button").disabled = true; @@ -229,13 +215,11 @@ function upgrade_request_callback(request) { data.sysupgrade_url = request_json.sysupgrade; var filename_split = data.sysupgrade_url.split("/") - data.filename = filename_split[filename_split.length - 1] + var filename = filename_split[filename_split.length - 1] - info_output = 'Firmware created: ' + data.filename + '' - if(data.advanced_mode == 1) { - info_output += '
Build log' - } - info_box(info_output); + var info_output = 'Firmware created: ' + filename + '' + info_output += ' Build log' + set_status("info", info_output); show("#keep_container"); var upgrade_button = $("#upgrade_button") @@ -247,7 +231,7 @@ function upgrade_request_callback(request) { function flash_image() { // Flash image via rpc-sys upgrade_start - info_box("Flashing firmware. Don't unpower device", true) + set_status("warning", "Flashing firmware. Don't unpower device", true) ubus_call("rpc-sys", "upgrade_start", { "keep": $("#keep").checked }, 'message'); ping_max = 3600; // in seconds setTimeout(ping_ubus, 10000) @@ -261,11 +245,11 @@ function ping_ubus() { var request = new XMLHttpRequest(); request.open("GET", ubus_url, true); request.addEventListener('error', function(event) { - info_box("Rebooting device", true); - setTimeout(ping_ubus, 1000) + set_status("warning", "Rebooting device", true); + setTimeout(ping_ubus, 5000) }); request.addEventListener('load', function(event) { - info_box("Success! Please reload web interface"); + set_status("success", "Success! Please reload web interface"); $("#upgrade_button").value = "Reload page"; show("#upgrade_button"); $("#upgrade_button").disabled = false; @@ -273,7 +257,7 @@ function ping_ubus() { }); request.send(); } else { - error_box("Web interface could not reconnect to your device. Please reload web interface or check device manually") + set_status("danger", "Web interface could not reconnect to your device. Please reload web interface or check device manually") } } @@ -293,7 +277,7 @@ function upload_image(blob) { }); request.addEventListener('error', function(event) { - info_box("Upload of firmware failed, please retry by reloading web interface") + set_status("info", "Upload of firmware failed, please retry by reloading web interface") }); request.open('POST', origin + '/cgi-bin/cgi-upload'); @@ -315,11 +299,12 @@ function download_image() { upload_image(blob) } }; - info_box("Downloading firmware", true); + set_status("info", "Downloading firmware", true); download_request.send(); } function server_request(request_dict, path, callback) { + var request_json; request_dict.distro = data.release.distribution; request_dict.target = data.release.target.split("\/")[0]; request_dict.subtarget = data.release.target.split("\/")[1]; @@ -328,11 +313,11 @@ function server_request(request_dict, path, callback) { request.setRequestHeader("Content-type", "application/json"); request.send(JSON.stringify(request_dict)); request.onerror = function(e) { - error_box("Upgrade server down or could not connect") + set_status("danger", "Upgrade server down or could not connect") show("#server_div"); } request.addEventListener('load', function(event) { - request_text = request.responseText; + var request_text = request.responseText; if (request.status === 200) { callback(request_text) @@ -341,62 +326,60 @@ function server_request(request_dict, path, callback) { if(imagebuilder === "queue") { // in queue var queue = request.getResponseHeader("X-Build-Queue-Position"); - info_box("In build queue position " + queue, true) + set_status("info", "In build queue position " + queue, true) console.log("queued"); } else if(imagebuilder === "initialize") { - info_box("Setting up ImageBuilder", true) + set_status("info", "Setting up ImageBuilder", true) console.log("Setting up imagebuilder"); } else if(imagebuilder === "building") { - info_box("Building image", true); + set_status("info", "Building image", true); console.log("building"); } else { // fallback if for some reasons the headers are missing e.g. browser blocks access - info_box("Processing request", true); + set_status("info", "Processing request", true); console.log(imagebuilder) } setTimeout(function() { server_request(request_dict, path, callback) }, 5000) } else if (request.status === 204) { // no upgrades available - info_box("No upgrades available") + set_status("success", "No upgrades available") } else if (request.status === 400) { // bad request request_json = JSON.parse(request_text) - error_box(request_json.error) + set_status("danger", request_json.error) } else if (request.status === 412) { // this is a bit generic - error_box("Unsupported device, release, target, subtraget or board") + set_status("danger", "Unsupported device, release, target, subtraget or board") } else if (request.status === 413) { - error_box("No firmware created due to image size. Try again with less packages selected.") + set_status("danger", "No firmware created due to image size. Try again with less packages selected.") } else if (request.status === 422) { var package_missing = request.getResponseHeader("X-Unknown-Package"); - error_box("Unknown package in request: " + package_missing + "") + set_status("danger", "Unknown package in request: " + package_missing + "") } else if (request.status === 500) { request_json = JSON.parse(request_text) - error_box_content = "Internal server error
" + var error_box_content = "Internal server error
" error_box_content += request_json.error if(request_json.log != undefined) { data.log_url = request_json.log } - error_box(error_box_content) + set_status("danger", error_box_content) } else if (request.status === 501) { - error_box("No sysupgrade file produced, may not supported by modell.") - + set_status("danger", "No sysupgrade file produced, may not supported by model.") } else if (request.status === 502) { // python part offline - error_box("Server down for maintenance") + set_status("danger", "Server down for maintenance") setTimeout(function() { server_request(request_dict, path, callback) }, 30000) } else if (request.status === 503) { - error_box("Server overloaded") + set_status("danger", "Server overloaded") setTimeout(function() { server_request(request_dict, path, callback) }, 30000) } }); } document.onload = setup() - -- 2.25.1