From d5a574239afbb26cc681f8b77919564effb3fb49 Mon Sep 17 00:00:00 2001 From: Gnadelwartz Date: Fri, 2 Feb 2018 20:39:44 +0100 Subject: [PATCH] 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"; }