From ed0bd9033c109a9262f761bdb3d7006353b1eeeb Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Sat, 27 Jan 2018 23:53:12 +0100 Subject: [PATCH] Uninstall addon, install addon from url --- addon/lib/rmupdate.tcl | 52 +++++++++++++--- addon/www/index.html | 136 +++++++++++++++++++++++++++++++++++------ addon/www/rest.cgi | 12 +++- rmupdate.tar.gz | Bin 18285 -> 18288 bytes 4 files changed, 175 insertions(+), 25 deletions(-) diff --git a/addon/lib/rmupdate.tcl b/addon/lib/rmupdate.tcl index a532683..5542e7b 100644 --- a/addon/lib/rmupdate.tcl +++ b/addon/lib/rmupdate.tcl @@ -67,6 +67,9 @@ proc ::rmupdate::i18n {str} { if {$str == "System will reboot now."} { return "Das System wird jetzt neu gestartet." } if {$str == "Latest firmware version: %s"} { return "Aktuellste Firmware-Version: %s" } if {$str == "Current firmware version: %s"} { return "Installierte Firmware-Version: %s" } + if {$str == "Download url missing."} { return "Download-URL fehlt." } + if {$str == "Addon %s successfully installed."} { return "Addon %s erfolgreich installiert." } + if {$str == "Addon %s successfully uninstalled."} { return "Addon %s erfolgreich deinstalliert." } } return $str } @@ -924,7 +927,7 @@ proc ::rmupdate::get_addon_info {{fetch_available_version 0} {fetch_download_url } } -proc ::rmupdate::install_addon {addon_id} { +proc ::rmupdate::uninstall_addon {addon_id} { variable rc_dir if {[get_running_installation] != ""} { @@ -933,12 +936,43 @@ proc ::rmupdate::install_addon {addon_id} { set_running_installation "Addon ${addon_id}" - array set addon [get_addon_info 1 1 0 $addon_id] - set download_url $addon(${addon_id}::download_url) + write_log 3 "Uninstalling addon" + if { [catch { + exec "${rc_dir}/${addon_id}" uninstall + } errormsg] } { + write_log 2 "${rc_dir}/${addon_id} uninstall failed: ${errormsg}" + } + + write_log 3 "Addon ${addon_id} successfully uninstalled" + + set_running_installation "" + + return [format [i18n "Addon %s successfully uninstalled."] $addon_id] +} + +proc ::rmupdate::install_addon {{addon_id ""} {download_url ""}} { + variable rc_dir + + if {[get_running_installation] != ""} { + error [i18n "Another install process is running."] + } + + if {$addon_id != ""} { + array set addon [get_addon_info 1 1 0 $addon_id] + set download_url $addon(${addon_id}::download_url) + } + + if {$download_url == ""} { + error [i18n "Download url missing."] + } + if {$addon_id == ""} { + set addon_id "unknown" + } + + set_running_installation "Addon ${addon_id}" write_log 3 "Downloading addon from ${download_url}." - regexp {/([^/]+)$} $download_url match archive_file - set archive_file "/tmp/${archive_file}" + set archive_file "/tmp/${addon_id}.tar.gz" if {[file exists $archive_file]} { file delete $archive_file } @@ -957,7 +991,11 @@ proc ::rmupdate::install_addon {addon_id} { write_log 3 "Running update_script" file attributes update_script -permissions 0755 - exec ./update_script noreboot + if { [catch { + exec ./update_script noreboot + } errormsg] } { + write_log 2 "Addon update_script failed: ${errormsg}" + } cd /tmp @@ -975,7 +1013,7 @@ proc ::rmupdate::install_addon {addon_id} { set_running_installation "" - return "Addon ${addon_id} successfully installed" + return [format [i18n "Addon %s successfully installed."] $addon_id] } #puts [rmupdate::get_latest_firmware_version] diff --git a/addon/www/index.html b/addon/www/index.html index 54595a0..60cda5c 100644 --- a/addon/www/index.html +++ b/addon/www/index.html @@ -231,8 +231,8 @@ along with this program. If not, see . } $("#firmware-summary").empty(); $("#firmware-summary").append( - $('
').html(i18next.t('current_installed_version') + ': ' + current_firmware + ''), - $('
').html(i18next.t('latest_available_version') + ': ' + latest_firmware) + $('
').html(i18next.t('current_installed_version') + ': ' + current_firmware + ''), + $('
').html(i18next.t('latest_available_version') + ': ' + latest_firmware) ); if (current_firmware != latest_firmware) { $("#firmware-summary").append( @@ -251,33 +251,65 @@ along with this program. If not, see . rest("GET", "/get_system_info", null, function(data) { $("#system-info").empty(); $("#system-info").append( - $('
').html(i18next.t('system_type', {'system_type': data.system_type})), - $('
').html(i18next.t('current_root_partiton', {'root_partition': data.root_partition})) + $('
').html(i18next.t('system_type', {'system_type': data.system_type})), + $('
').html(i18next.t('current_root_partiton', {'root_partition': data.root_partition})) ); }); } - function install_addon(addon_id) { + function install_addon(addon_id, download_url) { if (!running_installation) { - display_message('info', 'Installing addon ' + addon_id + '.', 6000000); + display_message('info', i18next.t('installing_addon', {'addon_id': addon_id}), 6000000); $('[data-update-addon-id="' + addon_id + '"]').addClass('loading'); $('[data-update-addon-id="' + addon_id + '"]').addClass('disabled'); - rest("POST", "/install_addon", JSON.stringify({"addon_id":addon_id}), + $('[data-uninstall-addon-id="' + addon_id + '"]').addClass('disabled'); + $('#install-addon-url-button').addClass('disabled'); + rest("POST", "/install_addon", JSON.stringify({"addon_id":addon_id, "download_url":download_url}), function(data) { //console.info(data); $('[data-update-addon-id="' + addon_id + '"]').removeClass('loading'); $('[data-update-addon-id="' + addon_id + '"]').removeClass('disabled'); + $('[data-uninstall-addon-id="' + addon_id + '"]').removeClass('disabled'); + $('#install-addon-url-button').removeClass('disabled'); + $('#install-addon-url-input').val(''); $('#tr-' + addon_id).removeClass('warning'); $('#tr-' + addon_id).addClass('positive'); $('#button-update-' + addon_id).removeClass('green'); $('#button-update-' + addon_id).addClass('gray'); $('#label-version-' + addon_id).text($('#label-available-version-' + addon_id).text()); display_message('success', data, 6000000); + get_addon_info(); }, function(xhr, ajaxOptions, thrownError) { console.error("Addon installation error: " + thrownError + ": " + xhr.responseText); $('[data-update-addon-id="' + addon_id + '"]').removeClass('loading'); $('[data-update-addon-id="' + addon_id + '"]').removeClass('disabled'); + $('[data-uninstall-addon-id="' + addon_id + '"]').removeClass('disabled'); + $('#install-addon-url-input').val(''); + $('#install-addon-url-button').removeClass('disabled'); + default_error_callback(xhr, ajaxOptions, thrownError); + } + ); + } + } + + function uninstall_addon(addon_id) { + if (!running_installation) { + display_message('info', i18next.t('uninstalling_addon', {'addon_id': addon_id}), 6000000); + $('[data-uninstall-addon-id="' + addon_id + '"]').addClass('loading'); + $('[data-uninstall-addon-id="' + addon_id + '"]').addClass('disabled'); + $('[data-update-addon-id="' + addon_id + '"]').addClass('disabled'); + rest("POST", "/uninstall_addon", JSON.stringify({"addon_id":addon_id}), + function(data) { + //console.info(data); + display_message('success', data, 6000000); + $('#tr-' + addon_id).remove(); + }, + function(xhr, ajaxOptions, thrownError) { + console.error("Addon installation error: " + thrownError + ": " + xhr.responseText); + $('[data-uninstall-addon-id="' + addon_id + '"]').removeClass('loading'); + $('[data-uninstall-addon-id="' + addon_id + '"]').removeClass('disabled'); + $('[data-update-addon-id="' + addon_id + '"]').removeClass('disabled'); default_error_callback(xhr, ajaxOptions, thrownError); } ); @@ -310,13 +342,30 @@ along with this program. If not, see . win.focus(); }); + var buninstall = $('
') + .attr('data-uninstall-addon-id', addon.id) + .append($(''), i18next.t('uninstall')); + buninstall.click(function() { + var addon_id = this.getAttribute('data-uninstall-addon-id'); + $('#modal-uninstall-addon').modal({ + onDeny: function(){ + return true; + }, + onApprove: function() { + uninstall_addon(addon_id); + return true; + } + }) + .modal('show'); + }); + var cls = (((!addon.available_version) || (addon.version == addon.available_version)) ? "positive" : "warning"); var available_version = ((addon.available_version) ? addon.available_version : "?"); $("#addon-info tbody").append($('').append( $('').append($('')), $('').append($('')), $('').append($('')), - $('').append(bupdate, bconfig) + $('').append(bupdate, bconfig, buninstall) )); }); $('#dimmer-addon-info').removeClass('active'); @@ -361,7 +410,14 @@ along with this program. If not, see . delete_firmware_img_success: 'Firmware image {{version}} successfully deleted.', installing_firmware: 'Installing firmware {{version}}.', install_latest_firmware: 'Install latest firmware', - system_not_upgradeable: 'System not upgradeable or filesystem to small!' + system_not_upgradeable: 'System not upgradeable or filesystem to small!', + uninstall: 'Uninstall', + cancel: 'Canel', + uninstall_addon: 'Uninstall addon', + sure_to_uninstall_addon: 'Are you sure you want to uninstall this addon?', + installing_addon: 'Installing addon {{addon_id}}.', + uninstalling_addon: 'Uninstalling addon {{addon_id}}.', + install_addon_from_url: 'Install addon from url', } }, de: { @@ -397,7 +453,14 @@ along with this program. If not, see . delete_firmware_img_success: 'Firmware-Image {{version}} erfolgreich gelöscht.', installing_firmware: 'Installiere Firmware {{version}}.', install_latest_firmware: 'Aktuellste Firmware installieren', - system_not_upgradeable: 'System nicht aktualisierbar oder Dateisystem zu klein!' + system_not_upgradeable: 'System nicht aktualisierbar oder Dateisystem zu klein!', + uninstall: 'Deinstallieren', + cancel: 'Abbrechen', + uninstall_addon: 'Addon deinstallieren', + sure_to_uninstall_addon: 'Sind sie sicher, dass sie dieses Addon deinstallieren wollen?', + installing_addon: 'Installiere Addon {{addon_id}}.', + uninstalling_addon: 'Deinstalliere Addon {{addon_id}}.', + install_addon_from_url: 'Addon von URL installieren', } } } @@ -427,15 +490,25 @@ along with this program. If not, see .
-

+

+ -

-
+ +

+ +
+
+

+
-

-
+

+ +
+
+

+
@@ -465,7 +538,11 @@ along with this program. If not, see .
-

+

+ +
+
+

@@ -483,7 +560,18 @@ along with this program. If not, see .
- +

+ +
+
+

+
+ + +
+ + + diff --git a/addon/www/rest.cgi b/addon/www/rest.cgi index 3c06109..3c7283d 100644 --- a/addon/www/rest.cgi +++ b/addon/www/rest.cgi @@ -67,9 +67,19 @@ proc process {} { error "Invalid version: ${data}" } } elseif {[lindex $path 1] == "install_addon"} { + regexp {\"addon_id\"\s*:\s*\"([^\"]+)\"} $data match addon_id + if { ![info exists addon_id] } { + set addon_id "" + } + regexp {\"download_url\"\s*:\s*\"([^\"]+)\"} $data match download_url + if { ![info exists download_url] } { + set download_url "" + } + return "\"[rmupdate::install_addon $addon_id $download_url]\"" + } elseif {[lindex $path 1] == "uninstall_addon"} { regexp {\"addon_id\"\s*:\s*\"([^\"]+)\"} $data match addon_id if { [info exists addon_id] && $addon_id != "" } { - return "\"[rmupdate::install_addon $addon_id]\"" + return "\"[rmupdate::uninstall_addon $addon_id]\"" } else { error "Invalid addon_id: ${addon_id}" } diff --git a/rmupdate.tar.gz b/rmupdate.tar.gz index 25174d7068ca43686c136e921592cc47a3ae75d3..b03cfa6ab3906838f89e916e3f6996c65166f834 100644 GIT binary patch delta 18260 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 X&&}uNbMv|R@aO*n?(|=406+l%&xrP( delta 18235 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