use ipkg info for filelist, show installation status in ipkg tree view

This commit is contained in:
Gnadelwartz
2018-02-02 20:39:44 +01:00
parent 8192e45651
commit d5a574239a
2 changed files with 46 additions and 25 deletions

View File

@@ -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(<PKGINFO>) {
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

View File

@@ -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 "<tr> <td nowrap>", $spacer x ($_[1]+1);
print "<img border=0 src=images/pack.gif>&nbsp;\n";
print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]).
print "<font size=\"+1\" color=\"red\">", ($inst[$i] ? "&#9989;" : "&nbsp;&#10008;&nbsp;"), "</font>";
print &ui_link("ipkg-edit_pack.cgi?package=". &urlize($pack[$i]).
"&version=". &urlize($vers[$i]). "&filter=". &urlize($in{'filter'}),
"<b>".&html_escape($pack[$i]. ($vers[$i] ? " $vers[$i]" : ""))."</b>" );
print $packages{$pack[$i], 'install'}, "...";
print "</td> <td>",&html_escape($desc[$i]),"</td>\n";
print "</tr>\n";
}