diff --git a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/NerdPack.page b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/NerdPack.page index d92a34b0..326c85a6 100644 --- a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/NerdPack.page +++ b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/NerdPack.page @@ -2,55 +2,37 @@ Icon="NerdPack.png" Menu="NetworkServices" Title="Nerd Pack" --- - - - - +.css"> + - +
- + \ No newline at end of file diff --git a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/css/NerdPack.css b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/css/NerdPack.css index b93c53bc..13de74fa 100644 --- a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/css/NerdPack.css +++ b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/css/NerdPack.css @@ -1,3 +1,9 @@ .package { - cursor: pointer; + cursor: pointer; } +#package_form { + margin-top: -22px; +} +.switch-button-label.off { + color: inherit; +} \ No newline at end of file diff --git a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/DownloadHelpers.php b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/DownloadHelpers.php index adf1983e..bd3e70e9 100644 --- a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/DownloadHelpers.php +++ b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/DownloadHelpers.php @@ -1,38 +1,36 @@ $previousProgress){ - $previousProgress = $progress; - $pct=(double)($progress/100); - $bar=round($pct * 30); - $pct_disp=number_format($pct * 100, 0); - $status_bar="\r["; - $status_bar.=str_repeat("|", $bar); - if($bar < 30){ - $status_bar.=">"; - $status_bar.=str_repeat("-", 30 - $bar); + if ($progress > $previousProgress) { + $previousProgress = $progress; + $pct = (double)($progress / 100); + $bar = round($pct * 30); + $pct_disp = number_format($pct * 100, 0); + $status_bar = "\r["; + $status_bar .= str_repeat("|", $bar); + + if ($bar < 30) { + $status_bar .= ">"; + $status_bar .= str_repeat("-", 30 - $bar); } else { - $status_bar.="|"; + $status_bar .= "|"; } - $status_bar.="] $pct_disp%"; + $status_bar .= "] $pct_disp%"; echo $status_bar; ob_flush(); - - if($progress == 100) { + if ($progress == 100) { echo "\n"; } } @@ -48,42 +46,39 @@ function get_file_from_url($file, $url) { //curl_setopt($ch, CURLOPT_TIMEOUT, 3600); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_HEADER, 0); - curl_setopt($ch, CURLOPT_USERAGENT, 'curl/' . $ch_vers['version'] ); - curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress_bar' ); + curl_setopt($ch, CURLOPT_USERAGENT, 'curl/'.$ch_vers['version']); + curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress_bar'); curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_FILE, $chfile ); + curl_setopt($ch, CURLOPT_FILE, $chfile); curl_exec($ch); curl_close($ch); fclose($chfile); } // get a json array of the contents of gihub repo -function get_content_from_github($repo, $file){ +function get_content_from_github($repo, $file) { $ch = curl_init(); $ch_vers = curl_version(); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_TIMEOUT, 30); - curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json')); - curl_setopt($ch, CURLOPT_USERAGENT, 'curl/' . $ch_vers['version'] ); - curl_setopt($ch, CURLOPT_URL, $repo); - $content = curl_exec($ch); - curl_close($ch); - if ((!empty($content)) && ($content != file_get_contents($file))) - file_put_contents($file, $content); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json']); + curl_setopt($ch, CURLOPT_USERAGENT, 'curl/'.$ch_vers['version']); + curl_setopt($ch, CURLOPT_URL, $repo); + $content = curl_exec($ch); + curl_close($ch); + if (!empty($content) && (!is_file($file) || $content != file_get_contents($file))) + file_put_contents($file, $content); } // Compare the github sha1 value of a file -function file_check_sha1($file, $sha1){ +function file_check_sha1($file, $sha1) { $size = filesize($file); - $handle = fopen($file, "rb"); - $contents = fread($handle, $size); - fclose($handle); - + $contents = file_get_contents($file); + // create a sha1 like github does $str = "blob ".$size."\0".$contents; $sha1_file = sha1($str); - - $return = ($sha1_file == $sha1) ? true : false; - return $return; + + return ($sha1_file == $sha1); } ?> \ No newline at end of file diff --git a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/NerdPackHelpers.php b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/NerdPackHelpers.php index 6266ef48..3190e142 100644 --- a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/NerdPackHelpers.php +++ b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/NerdPackHelpers.php @@ -1,5 +1,39 @@ &1 | logger -tnerdpack'); + if (!$quiet) { + echo "\n".$output." \n"; + usleep(100000); + } +} + +function format_size($value, $decimals, $unit = '?') { if ($value == '') return 'unknown'; @@ -26,7 +60,7 @@ function format_size($value, $decimals, $unit='?') { case 'T': return number_format($value / (float)1099511627776, $decimals).' TB'; case 'G': return number_format($value / (float)(1 << 30), $decimals).' GB'; case 'M': return number_format($value / (float)(1 << 20), $decimals).' MB'; - case 'K': return number_format($value / (float)(1 << 10), $decimals).' kB'; + case 'K': return number_format($value / (float)(1 << 10), $decimals).' KB'; case 'B': return $value.' B'; } diff --git a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/PackageQuery.php b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/PackageQuery.php index f5b0655c..743c3e9b 100644 --- a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/PackageQuery.php +++ b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/include/PackageQuery.php @@ -1,71 +1,47 @@ 4){ //if package name has a subset get it + if (sizeof($pkg_nameArray) > 4) { //if package name has a subset get it for ($ii = 1; $ii < sizeof($pkg_nameArray)-3; $ii++) { - $pkg_name = $pkg_name."-".$pkg_nameArray[$ii]; - } + $pkg_name .= '-'.$pkg_nameArray[$ii]; + } } - $pkg_version = $pkg_nameArray[sizeof($pkg_nameArray)-3]; // get package version + $pkg_version = $pkg_nameArray[sizeof($pkg_nameArray) - 3]; // get package version - $pkg_nver = $pkg_name."-".str_replace(".", "_", $pkg_version); // add underscored version to package name - - $pkg_pattern = "/^".$pkg_name.".*/"; // search patter for packages + $pkg_nver = $pkg_name.'-'.str_replace('.', '_', $pkg_version); // add underscored version to package name - $pkg = array(); + $pkg_pattern = '/^'.$pkg_name.'.*/'; // search patter for packages - $pkg["name"] = $pkgs_github_array[$i]["name"]; // add full package name - - $pkg["pkgname"] = $pkg_name; // add package name only - - $pkg["pkgnver"] = $pkg_nver; // add package name with underscored version - - $pkg["pkgversion"] = $pkg_version; // add package name with underscored version - - $pkg["size"] = format_size($pkgs_github_array[$i]["size"], 1, '?'); // add package size - - // checks if package name is installed - $pkg["installed"] = preg_grep($pkg_pattern , $pkgs_installed) ? "yes" : "no"; - - // checks if package is installed equals github exactly - $pkg["installeq"] = in_array( pathinfo($pkgs_github_array[$i]["name"], PATHINFO_FILENAME), $pkgs_installed ) ? "yes" : "no"; - - // checks if package name is downloaded - $pkg["downloaded"] = preg_grep($pkg_pattern , $pkgs_downloaded) ? "yes" : "no"; - - // checks if package is downloaded equals github exactly - $pkg["downloadeq"] = in_array( $pkgs_github_array[$i]["name"], $pkgs_downloaded ) ? "yes" : "no"; - - $pkg["config"] = isset($pkg_cfg["$pkg_nver"]) ? $pkg_cfg["$pkg_nver"] : "no"; // checks config for install preference - - $pkg["desc"] = $pkgs_desc_array["$pkg_name"]; + $pkg = [ + 'name' => $pkg_github['name'], // add full package name + 'pkgname' => $pkg_name, // add package name only + 'pkgnver' => $pkg_nver, // add package name with underscored version + 'pkgversion' => $pkg_version, // add package name with raw version + 'size' => format_size($pkg_github['size'], 1, '?'), // add package size + 'installed' => preg_grep($pkg_pattern, $pkgs_installed) ? 'yes' : 'no', // checks if package name is installed + 'installeq' => in_array(pathinfo($pkg_github['name'], PATHINFO_FILENAME), $pkgs_installed) ? 'yes' : 'no', // checks if package is installed equals github exactly + 'downloaded' => preg_grep($pkg_pattern, $pkgs_downloaded) ? 'yes' : 'no', // checks if package name is downloaded + 'downloadeq' => in_array($pkg_github['name'], $pkgs_downloaded) ? 'yes' : 'no', // checks if package is downloaded equals github exactly + 'config' => isset($pkg_cfg[$pkg_nver]) ? $pkg_cfg[$pkg_nver] : 'no', // checks config for install preference + 'desc' => $pkgs_desc_array[$pkg_name] + ]; $pkgs_array[] = $pkg; } echo json_encode($pkgs_array); -?> +?> \ No newline at end of file diff --git a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/js/jquery.NerdPack.js b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/js/jquery.NerdPack.js index 41baf482..d5d2db25 100644 --- a/source/NerdPack/usr/local/emhttp/plugins/NerdPack/js/jquery.NerdPack.js +++ b/source/NerdPack/usr/local/emhttp/plugins/NerdPack/js/jquery.NerdPack.js @@ -1,153 +1,141 @@ $(function(){ - // "uninstall package" switch and cookie - $('#uninstallpkg') - .switchButton({ - labels_placement: "left", - on_label: 'unInstall On', - off_label: 'unInstall Off', - checked: $.cookie('nerdpack_packages_uninstall') == '--uninstall' - }) - .change(function () { - $.cookie('nerdpack_packages_uninstall', $('#uninstallpkg').prop('checked') ? '--uninstall' : '', { expires: 3650 }); + // tablesorter options + $("#tblPackages").tablesorter({ + sortList: [[0,1]], + widgets: ["saveSort", "filter", "stickyHeaders"], + widgetOptions: { + stickyHeaders_filteredToTop: true, + filter_hideEmpty: true, + filter_liveSearch: true, + filter_saveFilters: true, + filter_reset: "button.reset", + filter_functions: { + ".filter-version": true, + ".filter-downloaded": true, + ".filter-installed": true + } + } }); + // "uninstall package" switch and cookie + $("#uninstallpkg") + .switchButton({ + labels_placement: "left", + on_label: "unInstall On", + off_label: "unInstall Off", + checked: $.cookie("nerdpack_packages_uninstall") == "--uninstall" + }) + .change(function () { + $.cookie("nerdpack_packages_uninstall", $(this).prop("checked") ? "--uninstall" : "", { expires: 3650 }); + }); + // "delete package" switch and cookie - $('#deletepkg') - .switchButton({ - labels_placement: "left", - on_label: 'delete On', - off_label: 'delete Off', - checked: $.cookie('nerdpack_packages_delete') == '--delete' - }) - .change(function () { - $.cookie('nerdpack_packages_delete', $('#deletepkg').prop('checked') ? '--delete' : '', { expires: 3650 }); - }); + $("#deletepkg") + .switchButton({ + labels_placement: "left", + on_label: "delete On", + off_label: "delete Off", + checked: $.cookie("nerdpack_packages_delete") == "--delete" + }) + .change(function () { + $.cookie("nerdpack_packages_delete", $(this).prop("checked") ? "--delete" : "", { expires: 3650 }); + }); // select all packages switch - $('#checkall') + $("#checkall") .switchButton({ labels_placement: "right", - on_label: 'Select All', - off_label: 'Select All', - checked: $.cookie('nerdpack_checkall') == 'yes' + on_label: "Select All", + off_label: "Select All", + checked: $.cookie("nerdpack_checkall") == "yes" }) - .change(function() { //on change - if(this.checked) { // check select status - $('.pkgcheckbox').each(function() { //loop through each checkbox - $(this).switchButton({checked: true}); - }); - $('.pkgvalue').each(function() { //loop through each value - $(this).val('yes'); - }); - }else{ - $('.pkgcheckbox').each(function() { //loop through each checkbox - $(this).switchButton({checked: false}); - }); - $('.pkgvalue').each(function() { //loop through each value - $(this).val('no'); - }); - } - }); + .change(function () { + var myval = $(this).prop("checked"); + $.cookie("nerdpack_checkall", myval ? "yes" : "no", { expires: 3650 }); + $(".pkgcheckbox").each(function() { // loop through each checkbox + $(this).switchButton({checked: myval}); + }); + $(".pkgvalue").each(function() { // loop through each value + $(this).val(myval ? "yes": "no"); + }); + }); - // set cookie on apply button press - $('#btnApply').click(function(event) { - $.cookie('nerdpack_checkall', $('#checkall').prop('checked') ? 'yes' : 'no', { expires: 3650 }); - packageManager(); + // set cookie on apply button press + $("#btnApply").click(function() { + checkDepends(); + + $.ajax({ + type: "POST", + url: "/update.php", + data: $("#package_form").serializeArray(), + success: function() { + openBox("/plugins/NerdPack/scripts/packagemanager&arg1=--download"+ + "&arg2="+$.cookie("nerdpack_packages_uninstall")+ + "&arg3="+$.cookie("nerdpack_packages_delete"), + "Package Manager", 600, 900, true); + } + }); }); packageQuery(); }); -function packageManager() { - $.ajax({ - type : "POST", - url : "/update.php", - data : $('#package_form').serializeArray(), - success: function() { - openBox('/plugins/NerdPack/scripts/packagemanager&arg1=--download'+ - '&arg2='+$.cookie('nerdpack_packages_uninstall')+ - '&arg3='+$.cookie('nerdpack_packages_delete'), - 'Package Manager',600,900,true); - } - }); -}; - //list all available packages in a table -function packageQuery() { - $("#tblPackages tbody").empty(); - $.ajax({ - type: "GET", - dataType: "json", - url: "/plugins/NerdPack/include/PackageQuery.php", - success: function(data) { - for( i in data ) { - var Update; - if (data[i].downloadeq == data[i].downloaded && data[i].installeq == data[i].installed ) - Update = " up-to-date"; - else - Update = " update ready"; +function packageQuery(force) { + $("#tblPackages tbody").html("