From 4ef84405bbf583b324b259f33afe4c9703e67e0b Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 11:53:48 +0100 Subject: [PATCH 01/17] add close/open button on top, remove unused code --- software/ipkg-tree.cgi | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index 365f1f2e4..f1000cf5f 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -1,6 +1,6 @@ -#!/usr/local/bin/perl -# tree.cgi -# Display the package tree +#!/opt/bin/perl +# ikpg-tree.cgi +# Display the IPKG package tree require './software-lib.pl'; &ReadParse(); @@ -30,8 +30,6 @@ $spacer = " "x3; for($i=0; $i<$n; $i++) { push(@pack, $packages{$i,'name'}); push(@vers, $packages{$i,'version'}); - #push(@svers, $packages{$i,'shortversion'} || - # $packages{$i,'version'}); push(@class, $packages{$i,'class'}); push(@desc, $packages{$i,'desc'}); } @@ -39,18 +37,9 @@ for($i=0; $i<$n; $i++) { $heir{""} = ""; foreach $c (sort { $a cmp $b } &unique(@class)) { if (!$c) { next; } - @w = split(/\//, $c); + @w = $c; $p = join('/', @w[0..$#w-1]); # parent class - #if (!defined($heir{$p})) { - # $pp = join('/', @w[0..$#w-2]); # grandparent class - # $heir{$pp} .= "$p\0"; - # $ppp = join('/', @w[0..$#w-3]); # great-grandparent class - # if ($ppp || 1) { - # $heir{$ppp} .= "$pp\0"; - # } - # } $heir{$p} .= "$c\0"; - #$hasclasses++; } # get the current open list @@ -58,15 +47,14 @@ foreach $c (sort { $a cmp $b } &unique(@class)) { $heiropen{""} = 1; # traverse the hierarchy +print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); +print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); print "\n"; &traverse("", 0); print "
\n"; -#if ($hasclasses) { - print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); - print "\n"; - print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); - print "

\n"; -# } +print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); +print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); +print "

\n"; &ui_print_footer("", $text{'index_return'}); From c9c99a7f2961a875de18f832c64cf6ece04d8f54 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 15:25:33 +0100 Subject: [PATCH 02/17] implement filtering of availible packages --- software/ipkg-tree.cgi | 3 ++- software/lang/de | 1 + software/lang/en | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index f1000cf5f..57a785c08 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -1,4 +1,4 @@ -#!/opt/bin/perl +#!/usr/local/bin/perl # ikpg-tree.cgi # Display the IPKG package tree @@ -36,6 +36,7 @@ for($i=0; $i<$n; $i++) { @order = sort { lc($pack[$a]) cmp lc($pack[$b]) } (0 .. $n-1); $heir{""} = ""; foreach $c (sort { $a cmp $b } &unique(@class)) { + # note: this is optimize for having only one level! if (!$c) { next; } @w = $c; $p = join('/', @w[0..$#w-1]); # parent class diff --git a/software/lang/de b/software/lang/de index 509cf4a3a..4ef7468f4 100644 --- a/software/lang/de +++ b/software/lang/de @@ -414,3 +414,4 @@ IPKG_install_package=Installieren IPKG_install_packagedesc=Installiere dieses Paket auf Deinem System IPKG_noupgrade=Nichts zu aktualisieren IPKG-edit_title=Verwalte IPKG Paket +IPKG_filter=Filtern nach ... diff --git a/software/lang/en b/software/lang/en index d7481de9a..b3274af70 100644 --- a/software/lang/en +++ b/software/lang/en @@ -446,3 +446,4 @@ IPKG_install_package=Install IPKG_install_packagedesc=Install this package on your system IPKG_noupgrade=Nothing to upgrade IPKG-edit_title=Manage IPKG Package +IPKG_filter=Filter ... From b0c1eea7b24d558921244c82cfa4e1969cc2a7d8 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 15:27:29 +0100 Subject: [PATCH 03/17] implement filtering of availible packages --- software/ipkg-tree.cgi | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index 57a785c08..3c1090495 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -9,6 +9,19 @@ require './software-lib.pl'; # read package list $n = &list_packages("ALL"); +# filter array +if ($in{'filter'}) { + for($i=0; $i<$n; $i++) { + if (index($packages{$i, 'name'}, $in{'filter'}) == -1) { + $packages{$i, 'name'}=''; + $packages{$i, 'version'}=''; + $packages{$i, 'desc'}=''; + $packages{$i, 'class'}=''; + } + } +} + + # prcoess openall / closeall actions if ( $in{'mode'} eq "closeall" ) { &save_heiropen([ ]); @@ -48,11 +61,23 @@ foreach $c (sort { $a cmp $b } &unique(@class)) { $heiropen{""} = 1; # traverse the hierarchy +print &ui_form_start("ipkg-tree.cgi"); +print &ui_submit($text{'IPKG_filter'}); +print &ui_textbox("filter", $in{'filter'}, 50); +print &ui_hidden("mode", "openall"); +print &ui_form_end(),"

\n"; + print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); print "\n"; &traverse("", 0); print "
\n"; +print &ui_form_start("ipkg-tree.cgi"); +print &ui_submit($text{'IPKG_filter'}); +print &ui_textbox("filter", $in{'filter'}, 50); +print &ui_hidden("mode", "openall"); +print &ui_form_end(),"

\n"; + print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); print "

\n"; @@ -82,6 +107,7 @@ if ($heiropen{$_[0]}) { # print packages followed by sub-folders foreach $i (@order) { if ($class[$i] eq $_[0]) { + next if ($vers[$i] == ''); print " ", $spacer x ($_[1]+1); print " \n"; print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]). From 8192e45651b86d52bddb76fb351be54965cf9667 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 17:22:02 +0100 Subject: [PATCH 04/17] finalize packed filter --- software/ipkg-edit_pack.cgi | 6 ++++-- software/ipkg-tree.cgi | 22 +++++++++++++--------- software/lang/de | 3 ++- software/lang/en | 3 ++- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/software/ipkg-edit_pack.cgi b/software/ipkg-edit_pack.cgi index 7e6b055c5..e73a8c484 100755 --- a/software/ipkg-edit_pack.cgi +++ b/software/ipkg-edit_pack.cgi @@ -45,8 +45,10 @@ print &ui_buttons_end(); if ($in{'search'}) { &ui_print_footer("search.cgi?search=$in{'search'}", $text{'search_return'}); } +elsif ($in{'filter'}) { + &ui_print_footer("ipkg-tree.cgi?filter=$in{'filter'}#$pinfo[1]", $text{'index_treturn'}); + } else { &ui_print_footer("ipkg-tree.cgi#$pinfo[1]", $text{'index_treturn'}); - } - +} diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index 3c1090495..eb56dc61e 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -27,7 +27,7 @@ if ( $in{'mode'} eq "closeall" ) { &save_heiropen([ ]); } -if ( $in{'mode'} eq "openall" ) { +if ( $in{'mode'} eq "openall" || $in{'filter'} ) { for($i=0; $i<$n; $i++) { @w = split(/\//, $packages{$i,'class'}); for($j=0; $j<@w; $j++) { @@ -64,22 +64,22 @@ $heiropen{""} = 1; print &ui_form_start("ipkg-tree.cgi"); print &ui_submit($text{'IPKG_filter'}); print &ui_textbox("filter", $in{'filter'}, 50); -print &ui_hidden("mode", "openall"); print &ui_form_end(),"

\n"; print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); +print &ui_link("ipkg-tree.cgi", $text{'IPKG_filterclear'}) if ($in{'filter'}); print "\n"; &traverse("", 0); print "
\n"; print &ui_form_start("ipkg-tree.cgi"); print &ui_submit($text{'IPKG_filter'}); print &ui_textbox("filter", $in{'filter'}, 50); -print &ui_hidden("mode", "openall"); print &ui_form_end(),"

\n"; print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); +print &ui_link("ipkg-tree.cgi", $text{'IPKG_filterclear'}) if ($in{'filter'}); print "

\n"; &ui_print_footer("", $text{'index_return'}); @@ -91,11 +91,15 @@ local($s, $act, $i); # Show the icon and class name print " ", $spacer x $_[1]; if ($_[0]) { - print "\n"; - $act = $heiropen{$_[0]} ? "close" : "open"; - my $link = "ipkg-$act.cgi?what=".&urlize($_[0]); + if ($in{'filter'}) { + print ""; + } else { + print "\n"; + $act = $heiropen{$_[0]} ? "close" : "open"; + my $link = "ipkg-$act.cgi?what=".&urlize($_[0]); + print &ui_link($link, ""); + } $_[0] =~ /([^\/]+)$/; - print &ui_link($link, ""); print "  $1\n"; } else { @@ -110,8 +114,8 @@ if ($heiropen{$_[0]}) { next if ($vers[$i] == ''); print " ", $spacer x ($_[1]+1); print " \n"; - print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]). - "&version=". &urlize($vers[$i]), + print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]). + "&version=". &urlize($vers[$i]). "&filter=". &urlize($in{'filter'}), "".&html_escape($pack[$i]. ($vers[$i] ? " $vers[$i]" : ""))."" ); print " ",&html_escape($desc[$i]),"\n"; print "\n"; diff --git a/software/lang/de b/software/lang/de index 4ef7468f4..079b9a088 100644 --- a/software/lang/de +++ b/software/lang/de @@ -414,4 +414,5 @@ IPKG_install_package=Installieren IPKG_install_packagedesc=Installiere dieses Paket auf Deinem System IPKG_noupgrade=Nichts zu aktualisieren IPKG-edit_title=Verwalte IPKG Paket -IPKG_filter=Filtern nach ... +IPKG_filter=Filtere Pakete +IPKG_filterclear=Filter löschen diff --git a/software/lang/en b/software/lang/en index b3274af70..ea607ea08 100644 --- a/software/lang/en +++ b/software/lang/en @@ -446,4 +446,5 @@ IPKG_install_package=Install IPKG_install_packagedesc=Install this package on your system IPKG_noupgrade=Nothing to upgrade IPKG-edit_title=Manage IPKG Package -IPKG_filter=Filter ... +IPKG_filter=Filter Packages +IPKG_filterclear=Clear Filter From d5a574239afbb26cc681f8b77919564effb3fb49 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 20:39:44 +0100 Subject: [PATCH 05/17] use ipkg info for filelist, show installation status in ipkg tree view --- software/ipkg-lib.pl | 65 +++++++++++++++++++++++++++--------------- software/ipkg-tree.cgi | 6 ++-- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index 612e25b93..3a46d81ad 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -14,40 +14,59 @@ return ("ipkg"); # list_packages([package]*) # Fills the array %packages with a list of all packages -# ipkg extension: if ALL is specified list alos uninstalled packages +# ipkg extension: if ALL is specified list also uninstalled packages sub list_packages { local $i = 0; local $arg = join(" ", map { quotemeta($_) } @_); -local $cmd = "ipkg list-installed"; -$cmd = "ipkg list" if ($arg eq "ALL"); %packages = ( ); -&open_execute_command(PKGINFO, $cmd, 1, 1); +&open_execute_command(PKGINFO, "ipkg info", 1, 1); while() { - local ($name, $version, $desc) = split(/ - /, $_); - $packages{$i,'name'} = "$name"; - $packages{$i,'version'} = "$version"; - $packages{$i,'desc'} = "$desc"; - - # generate categories from names, lib and x - $name =~ m/^([^-0-9]*)/; - local $cat= $1; - if ($cat =~ m/^(lib|^(gnu)|^(gtk)|^(perl)|^(net)|^ncurses)/i) { - $cat=$1; - } elsif ($cat =~ /^x|motif/ && $desc =~ /X |Xorg|X11|XDMCP|Xinerama|Athena|Motif/) { - $cat = "x11"; - } elsif ($cat =~ /^x/ && $desc eq "") { - $cat = "x"; - } elsif ($cat =~ /^arc|^bzip|^cpio|^freeze|^gzip|^lha|^lzo|^tar|^upx|^xz|^zip|^zlib|^zoo|^unzip|^unrar/) { - $cat = "archiver"; - } - $packages{$i,'class'} = $cat; - $i++; + $_ =~ s/\r|\n//g; + local ($param, $val) = split(/: /, $_); + if ($param eq 'Package') { + $name=$val; + } elsif ($param eq 'Version') { + $version=$val; + } elsif ($param eq 'Description') { + $desc=$val; + } elsif ($param eq 'Section') { + $class=$val; + } elsif ($param eq 'Installed-Time') { + $inst=$val; + } elsif ($val eq '') { + next if (! $inst && $arg ne "ALL"); + $packages{$i,'name'} = $name; + $packages{$i,'version'} = $version; + $packages{$i,'desc'} = $desc; + $packages{$i,'install'} = $inst; + #$packages{$i,'class'} = $class; + # generate categories from names, lib and x + $name =~ m/^([^-0-9]*)/; + local $cat= $1; + if ($class =~ m/^(audio|editor|games)/) { + $cat=$1; + } elsif ($cat =~ m/^(audio|auto|diff|lib|ffmpeg|gnu|gtk|perl|net|ncurses)/) { + $cat=$1; + } elsif ($cat =~ /^x|motif/ && $desc =~ /X |Xorg|X11|XDMCP|Xinerama|Athena|Motif/) { + $cat = "x11"; + } elsif ($cat =~ /^x/ && $desc eq "") { + $cat = "x"; + } elsif ($cat =~ /^(esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)/ ) { + $cat = "mail"; + } elsif ($cat =~ /^(arc|bzip|cabex|cpio|freeze|gzip|lha|lzo|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)/) { + $cat = "archiver"; + } + $packages{$i,'class'} = $cat; + $inst=''; + $i++; + } } close(PKGINFO); return $i; } + # package_info(package) # Returns an array of package information in the order # name, class, description, arch, version, vendor, installtime diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index eb56dc61e..15e7ccfa1 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -45,6 +45,7 @@ for($i=0; $i<$n; $i++) { push(@vers, $packages{$i,'version'}); push(@class, $packages{$i,'class'}); push(@desc, $packages{$i,'desc'}); + push(@inst, $packages{$i,'install'}); } @order = sort { lc($pack[$a]) cmp lc($pack[$b]) } (0 .. $n-1); $heir{""} = ""; @@ -113,10 +114,11 @@ if ($heiropen{$_[0]}) { if ($class[$i] eq $_[0]) { next if ($vers[$i] == ''); print " ", $spacer x ($_[1]+1); - print " \n"; - print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]). + print "", ($inst[$i] ? "✅" : " ✘ "), ""; + print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]). "&version=". &urlize($vers[$i]). "&filter=". &urlize($in{'filter'}), "".&html_escape($pack[$i]. ($vers[$i] ? " $vers[$i]" : ""))."" ); + print $packages{$pack[$i], 'install'}, "..."; print " ",&html_escape($desc[$i]),"\n"; print "\n"; } From 543ffabbcb900c73febbc5a04dd3fa4610424a42 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 20:52:23 +0100 Subject: [PATCH 06/17] p7 -> archiver --- software/ipkg-lib.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index 3a46d81ad..bf539949b 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -42,7 +42,7 @@ while() { $packages{$i,'install'} = $inst; #$packages{$i,'class'} = $class; # generate categories from names, lib and x - $name =~ m/^([^-0-9]*)/; + $name =~ m/^(..[^-0-9]*)/; local $cat= $1; if ($class =~ m/^(audio|editor|games)/) { $cat=$1; @@ -54,7 +54,7 @@ while() { $cat = "x"; } elsif ($cat =~ /^(esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)/ ) { $cat = "mail"; - } elsif ($cat =~ /^(arc|bzip|cabex|cpio|freeze|gzip|lha|lzo|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)/) { + } elsif ($cat =~ /^(arc|bzip|cabex|cpio|freeze|gzip|lha|lzo|p7||tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)/) { $cat = "archiver"; } $packages{$i,'class'} = $cat; From 1c061b09dd14d0af6462d3effccc1e965996782b Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 20:56:23 +0100 Subject: [PATCH 07/17] fix archiver regex --- software/ipkg-lib.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index bf539949b..3b602a01f 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -54,7 +54,7 @@ while() { $cat = "x"; } elsif ($cat =~ /^(esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)/ ) { $cat = "mail"; - } elsif ($cat =~ /^(arc|bzip|cabex|cpio|freeze|gzip|lha|lzo|p7||tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)/) { + } elsif ($cat =~ /^(arc|bzip|cabex|cpio|freeze|gzip|lha|lzo|p7|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)/) { $cat = "archiver"; } $packages{$i,'class'} = $cat; From 603870f5967160dd7c09a0fee77df6674dba721f Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 21:21:59 +0100 Subject: [PATCH 08/17] new categor www --- software/ipkg-lib.pl | 6 ++++-- software/ipkg-tree.cgi | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index 3b602a01f..2b64b8e1d 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -52,10 +52,12 @@ while() { $cat = "x11"; } elsif ($cat =~ /^x/ && $desc eq "") { $cat = "x"; - } elsif ($cat =~ /^(esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)/ ) { + } elsif ($cat =~ /^(amavisdesmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)$/ ) { $cat = "mail"; - } elsif ($cat =~ /^(arc|bzip|cabex|cpio|freeze|gzip|lha|lzo|p7|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)/) { + } elsif ($cat =~ /^(arc|bzi2p|cabextract|cpio|freeze|gzip|lha|lzo|p7|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { $cat = "archiver"; + } elsif ($cat =~ /^(apache|cherokee|hiawatha|lighttpd|minihttpd|mod|thttpd)$|^shell/) { + $cat = "www"; } $packages{$i,'class'} = $cat; $inst=''; diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index 15e7ccfa1..918f4e3bb 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -118,7 +118,6 @@ if ($heiropen{$_[0]}) { print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]). "&version=". &urlize($vers[$i]). "&filter=". &urlize($in{'filter'}), "".&html_escape($pack[$i]. ($vers[$i] ? " $vers[$i]" : ""))."" ); - print $packages{$pack[$i], 'install'}, "..."; print " ",&html_escape($desc[$i]),"\n"; print "\n"; } From 9038b8fb16bd72c0f46d1fe40fd6d31d98092c2f Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 21:24:47 +0100 Subject: [PATCH 09/17] fix category mail --- software/ipkg-lib.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index 2b64b8e1d..d5eef24dc 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -52,7 +52,7 @@ while() { $cat = "x11"; } elsif ($cat =~ /^x/ && $desc eq "") { $cat = "x"; - } elsif ($cat =~ /^(amavisdesmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)$/ ) { + } elsif ($cat =~ /^(amavisd|esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)$/ ) { $cat = "mail"; } elsif ($cat =~ /^(arc|bzi2p|cabextract|cpio|freeze|gzip|lha|lzo|p7|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { $cat = "archiver"; From a4e2753b534f8470673ec8ee9868d872a59063b4 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Sat, 3 Feb 2018 13:37:54 +0100 Subject: [PATCH 10/17] show how many packes after filtering --- software/ipkg-lib.pl | 3 --- software/ipkg-tree.cgi | 12 +++++++++--- software/lang/de | 1 + software/lang/en | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index d5eef24dc..f5f4d56f2 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -40,7 +40,6 @@ while() { $packages{$i,'version'} = $version; $packages{$i,'desc'} = $desc; $packages{$i,'install'} = $inst; - #$packages{$i,'class'} = $class; # generate categories from names, lib and x $name =~ m/^(..[^-0-9]*)/; local $cat= $1; @@ -50,8 +49,6 @@ while() { $cat=$1; } elsif ($cat =~ /^x|motif/ && $desc =~ /X |Xorg|X11|XDMCP|Xinerama|Athena|Motif/) { $cat = "x11"; - } elsif ($cat =~ /^x/ && $desc eq "") { - $cat = "x"; } elsif ($cat =~ /^(amavisd|esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)$/ ) { $cat = "mail"; } elsif ($cat =~ /^(arc|bzi2p|cabextract|cpio|freeze|gzip|lha|lzo|p7|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { diff --git a/software/ipkg-tree.cgi b/software/ipkg-tree.cgi index 918f4e3bb..d547267d4 100755 --- a/software/ipkg-tree.cgi +++ b/software/ipkg-tree.cgi @@ -13,6 +13,7 @@ $n = &list_packages("ALL"); if ($in{'filter'}) { for($i=0; $i<$n; $i++) { if (index($packages{$i, 'name'}, $in{'filter'}) == -1) { + $filter++; $packages{$i, 'name'}=''; $packages{$i, 'version'}=''; $packages{$i, 'desc'}=''; @@ -21,7 +22,6 @@ if ($in{'filter'}) { } } - # prcoess openall / closeall actions if ( $in{'mode'} eq "closeall" ) { &save_heiropen([ ]); @@ -69,7 +69,10 @@ print &ui_form_end(),"

\n"; print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); -print &ui_link("ipkg-tree.cgi", $text{'IPKG_filterclear'}) if ($in{'filter'}); +if ($in{'filter'}) { + print &ui_link("ipkg-tree.cgi", $text{'IPKG_filterclear'}); + print "  ", &text('IPKG_filtered',$n-$filter,$n+1), "\n"; +} print "\n"; &traverse("", 0); print "
\n"; @@ -80,7 +83,10 @@ print &ui_form_end(),"

\n"; print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'}); print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'}); -print &ui_link("ipkg-tree.cgi", $text{'IPKG_filterclear'}) if ($in{'filter'}); +if ($in{'filter'}) { + print &ui_link("ipkg-tree.cgi", $text{'IPKG_filterclear'}); + print "  ", &text('IPKG_filtered',$n-$filter,$n+1), "\n"; +} print "

\n"; &ui_print_footer("", $text{'index_return'}); diff --git a/software/lang/de b/software/lang/de index 079b9a088..9e1b7e594 100644 --- a/software/lang/de +++ b/software/lang/de @@ -416,3 +416,4 @@ IPKG_noupgrade=Nichts zu aktualisieren IPKG-edit_title=Verwalte IPKG Paket IPKG_filter=Filtere Pakete IPKG_filterclear=Filter löschen +IPKG_filtered=Es werden $1 von $2 Pakten angezeigt diff --git a/software/lang/en b/software/lang/en index ea607ea08..4b9db4ad8 100644 --- a/software/lang/en +++ b/software/lang/en @@ -448,3 +448,4 @@ IPKG_noupgrade=Nothing to upgrade IPKG-edit_title=Manage IPKG Package IPKG_filter=Filter Packages IPKG_filterclear=Clear Filter +IPKG_filtered=Displaying $1 packages out of $2 From 9f1dd431b9fbe9809fc44b20d8be26a09c578999 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Sat, 3 Feb 2018 14:14:37 +0100 Subject: [PATCH 11/17] fix german lang typo --- software/lang/de | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/software/lang/de b/software/lang/de index 9e1b7e594..6a64d3a09 100644 --- a/software/lang/de +++ b/software/lang/de @@ -416,4 +416,4 @@ IPKG_noupgrade=Nichts zu aktualisieren IPKG-edit_title=Verwalte IPKG Paket IPKG_filter=Filtere Pakete IPKG_filterclear=Filter löschen -IPKG_filtered=Es werden $1 von $2 Pakten angezeigt +IPKG_filtered=Es werden $1 von $2 Paketen angezeigt From a28c45261df529736f8fd00d4e22168fefa6e61f Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Mon, 5 Feb 2018 16:45:57 +0100 Subject: [PATCH 12/17] optimize package list processing --- software/ipkg-lib.pl | 57 +++++++++++++++++++-------------------- software/ipkg_upgrade.cgi | 2 +- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index f5f4d56f2..19524ee11 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -21,43 +21,40 @@ local $i = 0; local $arg = join(" ", map { quotemeta($_) } @_); %packages = ( ); &open_execute_command(PKGINFO, "ipkg info", 1, 1); +local %temp = (); while() { $_ =~ s/\r|\n//g; - local ($param, $val) = split(/: /, $_); - if ($param eq 'Package') { - $name=$val; - } elsif ($param eq 'Version') { - $version=$val; - } elsif ($param eq 'Description') { - $desc=$val; - } elsif ($param eq 'Section') { - $class=$val; - } elsif ($param eq 'Installed-Time') { - $inst=$val; - } elsif ($val eq '') { - next if (! $inst && $arg ne "ALL"); - $packages{$i,'name'} = $name; - $packages{$i,'version'} = $version; - $packages{$i,'desc'} = $desc; - $packages{$i,'install'} = $inst; - # generate categories from names, lib and x - $name =~ m/^(..[^-0-9]*)/; + if ($_) { + local ($param, $val) = split(/: /, $_); + $temp{$param}=$val; + } else { + next if (! $temp{'Installed-Time'} && $arg ne "ALL"); + $packages{$i,'name'} = $temp{'Package'}; + $packages{$i,'version'} = $temp{'Version'}; + $packages{$i,'desc'} = $temp{'Description'}; + $packages{$i,'install'} = $temp{'Installed-Time'}; + # generate categories from names, Section + $temp{'Package'} =~ m/^(..[^-0-9]*)/; local $cat= $1; - if ($class =~ m/^(audio|editor|games)/) { - $cat=$1; - } elsif ($cat =~ m/^(audio|auto|diff|lib|ffmpeg|gnu|gtk|perl|net|ncurses)/) { - $cat=$1; + if ($temp{'Section'} =~ m/^(audio|editor|games)/) { + $cat=ucfirst($1); + } elsif ($cat =~ /^(audio|auto|diff|lib|ffmpeg|gnu|gtk|perl|net|ncurses|py)/) { + $cat=ucfirst($1); + } elsif ($cat =~ /^(amavisd|cyrus|esmtp|fetchmail|imap|mail|mini|mutt|mpop|msmtp|offlineimap|pop|postfix|postgrey|procmail|putmail|up|qpopper|sendmail|xmail)$/ ) { + $cat = "Mail"; + } elsif ($cat =~ /^(arc|bzi2p|cabextract|cpio|freeze|gzip|lha|lzo|p7zip|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { + $cat = "Archiver"; } elsif ($cat =~ /^x|motif/ && $desc =~ /X |Xorg|X11|XDMCP|Xinerama|Athena|Motif/) { - $cat = "x11"; - } elsif ($cat =~ /^(amavisd|esmtp|fetchmail|mail|mini|mutt|mpop|msmtp|pop|postfix|postgrey|procmail|putmail|qpopper|sendmail|xmail)$/ ) { - $cat = "mail"; - } elsif ($cat =~ /^(arc|bzi2p|cabextract|cpio|freeze|gzip|lha|lzo|p7|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { - $cat = "archiver"; + $cat = "X11"; + } elsif ($cat =~ /^([^v]+sh|sharutils)$/) { + $cat = "Shell"; + } elsif ($cat =~ /^(ed|gawk|sed|vim)$/) { + $cat = "Editor"; } elsif ($cat =~ /^(apache|cherokee|hiawatha|lighttpd|minihttpd|mod|thttpd)$|^shell/) { - $cat = "www"; + $cat = "WWW"; } $packages{$i,'class'} = $cat; - $inst=''; + %temp = (); $i++; } } diff --git a/software/ipkg_upgrade.cgi b/software/ipkg_upgrade.cgi index 4f3a7bf4b..5565efea3 100755 --- a/software/ipkg_upgrade.cgi +++ b/software/ipkg_upgrade.cgi @@ -21,7 +21,7 @@ print "",&text('IPKG_updatedesc', "$cmd"),"

\n"; print "

";
 &additional_log("exec", undef, $cmd);
 &clean_environment();
-open(CMD, "$cmd 2>&1 &1 ) {
 	print &html_escape($_);
 	$out .= $_;

From a507db65b0ab2d343474faa0d2a9cbec724d70b0 Mon Sep 17 00:00:00 2001
From: Gnadelwartz 
Date: Tue, 6 Feb 2018 14:32:05 +0100
Subject: [PATCH 13/17] fix missing blank in redirect

---
 software/close.cgi |  5 ++---
 software/open.cgi  |  2 +-
 software/tree.cgi  | 10 ++++++++--
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/software/close.cgi b/software/close.cgi
index ea79e3ceb..a2ab1b511 100755
--- a/software/close.cgi
+++ b/software/close.cgi
@@ -1,4 +1,4 @@
-#!/usr/local/bin/perl
+#!//usr/local/bin/perl
 # close.cgi
 # Remove some class from the open list
 
@@ -7,5 +7,4 @@ require './software-lib.pl';
 @heiropen = &get_heiropen();
 @heiropen = grep { $_ ne $in{'what'} } @heiropen;
 &save_heiropen(\@heiropen);
-&redirect("tree.cgi#$in{'what'}");
-
+&redirect("tree.cgi#".&urlize($in{'what'}));
diff --git a/software/open.cgi b/software/open.cgi
index d69a9b1d3..c68531a7c 100755
--- a/software/open.cgi
+++ b/software/open.cgi
@@ -7,5 +7,5 @@ require './software-lib.pl';
 @heiropen = &get_heiropen();
 push(@heiropen, $in{'what'});
 &save_heiropen(\@heiropen);
-&redirect("tree.cgi#$in{'what'}");
+&redirect("tree.cgi#".&urlize($in{'what'}));
 
diff --git a/software/tree.cgi b/software/tree.cgi
index fcad5a8fd..46a9e5eb0 100755
--- a/software/tree.cgi
+++ b/software/tree.cgi
@@ -1,4 +1,4 @@
-#!/usr/local/bin/perl
+#!/usr/local/bin/bin/perl
 # tree.cgi
 # Display the package tree
 
@@ -40,6 +40,12 @@ foreach $c (sort { $a cmp $b } &unique(@class)) {
 $heiropen{""} = 1;
 
 # traverse the hierarchy
+if ($hasclasses) {
+	print &ui_link("closeall.cgi", $text{'index_close'});
+    print "\n";
+	print &ui_link("openall.cgi", $text{'index_open'});
+    print "

\n"; + } print "\n"; &traverse("", 0); print "
\n"; @@ -76,7 +82,7 @@ if ($heiropen{$_[0]}) { foreach $i (@order) { if ($class[$i] eq $_[0]) { print " ", $spacer x ($_[1]+1); - print " \n"; + print " \n"; print &ui_link("edit_pack.cgi?package=". &urlize($pack[$i])."&version=". &urlize($vers[$i]), &html_escape($pack[$i]. From ca9dc7a2ed2cb8d6a52aa7f7980589d78546acff Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Tue, 6 Feb 2018 14:33:30 +0100 Subject: [PATCH 14/17] fix also for ipkg-tree, more categories --- software/ipkg-close.cgi | 2 +- software/ipkg-open.cgi | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/software/ipkg-close.cgi b/software/ipkg-close.cgi index 7ecf25f47..160b3dd39 100755 --- a/software/ipkg-close.cgi +++ b/software/ipkg-close.cgi @@ -7,5 +7,5 @@ require './software-lib.pl'; @heiropen = &get_heiropen(); @heiropen = grep { $_ ne $in{'what'} } @heiropen; &save_heiropen(\@heiropen); -&redirect("ipkg-tree.cgi#$in{'what'}"); +&redirect("ipkg-tree.cgi#".&urlize($in{'what'})); diff --git a/software/ipkg-open.cgi b/software/ipkg-open.cgi index c907cfd63..d3f26dc4c 100755 --- a/software/ipkg-open.cgi +++ b/software/ipkg-open.cgi @@ -1,4 +1,4 @@ -#!/usr/local/bin/perl +#!//usr/local/bin/perl # open.cgi # Add some class to the open list @@ -7,5 +7,5 @@ require './software-lib.pl'; @heiropen = &get_heiropen(); push(@heiropen, $in{'what'}); &save_heiropen(\@heiropen); -&redirect("ipkg-tree.cgi#$in{'what'}"); +&redirect("ipkg-tree.cgi#".&urlize($in{'what'})); From ee7b90795f5524efb572e6002f94004a4aac0635 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Tue, 6 Feb 2018 14:35:00 +0100 Subject: [PATCH 15/17] fix //usr/local/bin/perl --- software/close.cgi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/software/close.cgi b/software/close.cgi index a2ab1b511..3a17b7d17 100755 --- a/software/close.cgi +++ b/software/close.cgi @@ -1,4 +1,4 @@ -#!//usr/local/bin/perl +#!/usr/local/bin/perl # close.cgi # Remove some class from the open list From 9d35cb8763f986545e5997010dbb3e5f25121091 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Tue, 6 Feb 2018 14:36:30 +0100 Subject: [PATCH 16/17] fix shebang --- software/ipkg-open.cgi | 2 +- software/tree.cgi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/software/ipkg-open.cgi b/software/ipkg-open.cgi index d3f26dc4c..268ea5a82 100755 --- a/software/ipkg-open.cgi +++ b/software/ipkg-open.cgi @@ -1,4 +1,4 @@ -#!//usr/local/bin/perl +#!/usr/local/bin/perl # open.cgi # Add some class to the open list diff --git a/software/tree.cgi b/software/tree.cgi index 46a9e5eb0..bc468a3da 100755 --- a/software/tree.cgi +++ b/software/tree.cgi @@ -1,4 +1,4 @@ -#!/usr/local/bin/bin/perl +#!/usr/local/bin/perl # tree.cgi # Display the package tree From 765437aa04d6a208ea3eb5728f8cef58e6349957 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Tue, 6 Feb 2018 14:38:08 +0100 Subject: [PATCH 17/17] ipkg-lib --- software/ipkg-lib.pl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/software/ipkg-lib.pl b/software/ipkg-lib.pl index 19524ee11..01e5364b3 100755 --- a/software/ipkg-lib.pl +++ b/software/ipkg-lib.pl @@ -36,14 +36,14 @@ while() { # generate categories from names, Section $temp{'Package'} =~ m/^(..[^-0-9]*)/; local $cat= $1; - if ($temp{'Section'} =~ m/^(audio|editor|games)/) { + if ($temp{'Section'} =~ m/^(audio|editor|media|print|games|shell|sys|utils)/) { $cat=ucfirst($1); - } elsif ($cat =~ /^(audio|auto|diff|lib|ffmpeg|gnu|gtk|perl|net|ncurses|py)/) { + } elsif ($cat =~ /^(audio|auto|core|compression|diff|lib|ffmpeg|gnu|gtk|perl|net|ncurses|py)/) { $cat=ucfirst($1); } elsif ($cat =~ /^(amavisd|cyrus|esmtp|fetchmail|imap|mail|mini|mutt|mpop|msmtp|offlineimap|pop|postfix|postgrey|procmail|putmail|up|qpopper|sendmail|xmail)$/ ) { $cat = "Mail"; - } elsif ($cat =~ /^(arc|bzi2p|cabextract|cpio|freeze|gzip|lha|lzo|p7zip|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { - $cat = "Archiver"; + } elsif ($cat =~ /^(arc|bzip|cabextract|cpio|freeze|gzip|lha|lzo|p7zip|tar|upx|unarj|xz|zip|zlib|zoo|unzip|unrar)$/) { + $cat = "Compression"; } elsif ($cat =~ /^x|motif/ && $desc =~ /X |Xorg|X11|XDMCP|Xinerama|Athena|Motif/) { $cat = "X11"; } elsif ($cat =~ /^([^v]+sh|sharutils)$/) { @@ -51,7 +51,7 @@ while() { } elsif ($cat =~ /^(ed|gawk|sed|vim)$/) { $cat = "Editor"; } elsif ($cat =~ /^(apache|cherokee|hiawatha|lighttpd|minihttpd|mod|thttpd)$|^shell/) { - $cat = "WWW"; + $cat = "Web"; } $packages{$i,'class'} = $cat; %temp = ();