+
diff --git a/var/mongoose/include/packages.jim b/var/mongoose/include/packages.jim
index 1b77969..47c9d9d 100755
--- a/var/mongoose/include/packages.jim
+++ b/var/mongoose/include/packages.jim
@@ -1,52 +1,55 @@
#!/mod/bin/jimsh
-# Build a list of available packages
+source /mod/var/mongoose/lib/pkg.class
+
+puts {
+
+
+
+
+
+
+
+
Package
+
Installed
+
Avail
+
Description
+
-set avail_pkgs {}
-foreach pkg [split [exec /bin/opkg list] "\n"] {
- if [regexp {^ } $pkg] {
- append descr $pkg
- } else {
- if {[regexp {^([^ ]+) - ([^ ]+) - (.*)$} \
- $pkg full name ver descr] == 0} { continue }
- }
- set avail_pkgs($name) [concat $ver "$descr"]
- #puts "Set: $name = ($ver, $descr) "
}
-# Build a list of installed packages - just the names
-set inst_pkgs {}
-foreach pkg [split [exec /bin/opkg list-installed] "\n"] {
- if {[regexp {^([^ ]+)} $pkg name] == 0} { continue }
- lappend inst_pkgs $name
- #puts "Inst: $name "
-}
+set avail [pkg avail]
+foreach name [lsort [array names avail]] {
+ set pkg [pkg load $name $avail($name)]
-puts "
"
-puts "
"
-puts "
Installed
"
-puts "
Name
"
-puts "
Version
"
-puts "
Description
"
-puts "
"
-
-foreach name [lsort [array names avail_pkgs]] {
- set value $avail_pkgs($name)
- set ver [lindex $value 0]
- set descr [lrange $value 1 [llength $value]]
-
- puts "
"
- puts "
"
- if {[lsearch $inst_pkgs $name] > -1} {
- puts ""
+ if {![$pkg is installed]} {
+ puts "
"
+ } elseif {[$pkg is upgradable]} {
+ puts "
"
} else {
- puts ""
+ puts "
"
}
- puts ""
- puts "
$name
"
- puts "
$ver
"
- puts "
$descr
"
+ puts "
+
$name
+
[$pkg get installed]
+
[$pkg get latest]
+
[$pkg get descr]
+ "
+
+ if {![$pkg is installed]} {
+ set type Install
+ } elseif {[$pkg is upgradable]} {
+ set type Upgrade
+ } else {
+ set type Remove
+ }
+
+ puts "
"
+
puts "
"
}
diff --git a/var/mongoose/lib/opkg b/var/mongoose/lib/opkg
new file mode 100755
index 0000000..4987a40
--- /dev/null
+++ b/var/mongoose/lib/opkg
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# stderr is always unbuffered so use that...
+/bin/opkg "$@" 1>&2
+exit 0
+
diff --git a/var/mongoose/lib/pkg.class b/var/mongoose/lib/pkg.class
new file mode 100755
index 0000000..e8fa13a
--- /dev/null
+++ b/var/mongoose/lib/pkg.class
@@ -0,0 +1,84 @@
+
+if {[expr ! [exists -proc class ]]} { package require oo }
+
+class pkg {
+ name ""
+ descr ""
+ installed ""
+ latest ""
+ install_time 0
+}
+
+pkg method _load {nm info} {
+ set name $nm
+ set latest [lindex $info 0]
+ set descr [lrange $info 1 end]
+
+ foreach line [split [exec /bin/opkg status $name] "\n"] {
+ if {[string match {Version: *} $line]} {
+ set installed [string range $line 9 end]
+ }
+ if {[string match {Installed-Time: } $line]} {
+ set install_time [string range $line 16 end]
+ }
+ }
+}
+
+pkg method is {what} {
+ switch $what {
+ installed {
+ if {$installed eq ""} { return 0 }
+ return 1
+ }
+ upgradable {
+ if {$installed eq $latest} { return 0 }
+ return 1
+ }
+ }
+ return 0
+}
+
+proc {pkg load} {nm info} {
+ set e [pkg]
+ $e _load $nm $info
+ return $e
+}
+
+proc {pkg avail} {} {
+ set avail_pkgs {}
+ foreach pkg [split [exec /bin/opkg list] "\n"] {
+ if [regexp {^ } $pkg] {
+ append descr $pkg
+ } else {
+ if {[regexp {^([^ ]+) - ([^ ]+) - (.*)$} \
+ $pkg full name ver descr] == 0} { continue }
+ }
+ set avail_pkgs($name) [concat $ver "$descr"]
+ #puts "Set: $name = ($ver, $descr) "
+ }
+ return $avail_pkgs
+}
+
+proc {pkg installed} {} {
+ # Build a list of installed packages - just the names
+ set inst_pkgs {}
+ foreach pkg [split [exec /bin/opkg list-installed] "\n"] {
+ if {[regexp {^([^ ]+)} $pkg name] == 0} { continue }
+ lappend inst_pkgs $name
+ #puts "Inst: $name "
+ }
+ return $inst_pkgs
+}
+
+proc {pkg upgradable} {} {
+ #webif - 0.5.3 - 0.5.7
+ set upgr_pkgs {}
+ foreach pkg [split [exec /bin/opkg list-upgradable] "\n"] {
+ if {[regexp {^([^ ]+) - ([^ ]+) - (.*)$} $pkg \
+ dummy name oldver newver] == 0} { continue }
+ set upgr_pkgs($name) [concat $oldver $newver]
+ #puts "Set: $name = ($oldver, $newver) "
+ }
+ return $upgr_pkgs
+}
+