2011-06-28 00:20:31 +00:00
|
|
|
|
2012-01-13 21:23:03 +00:00
|
|
|
if {![exists -proc class]} { package require oo }
|
2011-06-28 00:20:31 +00:00
|
|
|
|
|
|
|
class pkg {
|
|
|
|
name ""
|
2011-07-11 23:29:21 +00:00
|
|
|
latest ""
|
2011-06-28 00:20:31 +00:00
|
|
|
descr ""
|
|
|
|
installed ""
|
|
|
|
}
|
|
|
|
|
2011-07-11 23:29:21 +00:00
|
|
|
set ::pkgmeta {}
|
|
|
|
|
|
|
|
pkg method _load {nm} {
|
2011-06-28 00:20:31 +00:00
|
|
|
set name $nm
|
2012-01-06 23:39:15 +00:00
|
|
|
foreach line [split [exec /bin/opkg list $nm] "\n"] {
|
|
|
|
# betaftpd - 0.0.8pre17-1 - Description...
|
|
|
|
regexp {^[^ ]+ - ([^ ]+) - (.*)$} $line x latest descr
|
|
|
|
}
|
2011-07-11 23:29:21 +00:00
|
|
|
set info [exec /bin/opkg list-installed $nm]
|
|
|
|
regexp {^([^ ]+) - ([^ ]+)$} $info full xname installed
|
2011-06-28 00:20:31 +00:00
|
|
|
|
2011-07-11 23:29:21 +00:00
|
|
|
return $self
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {pkg load} {nm} {
|
|
|
|
return [[pkg] _load $nm]
|
2011-06-28 00:20:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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 avail} {} {
|
2011-07-11 23:29:21 +00:00
|
|
|
set inst_pkgs [pkg inst]
|
2011-06-28 00:20:31 +00:00
|
|
|
set avail_pkgs {}
|
|
|
|
foreach pkg [split [exec /bin/opkg list] "\n"] {
|
2011-07-11 23:29:21 +00:00
|
|
|
if [regexp {^ } $pkg] { continue }
|
|
|
|
if {[regexp {^([^ ]+)} $pkg name] == 0} { continue }
|
|
|
|
if {$name ni $inst_pkgs} { lappend avail_pkgs $name }
|
|
|
|
#puts "New: $name<br>"
|
2011-06-28 00:20:31 +00:00
|
|
|
}
|
|
|
|
return $avail_pkgs
|
|
|
|
}
|
|
|
|
|
2011-07-11 23:29:21 +00:00
|
|
|
proc {pkg inst} {} {
|
2011-06-28 00:20:31 +00:00
|
|
|
# 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<br>"
|
|
|
|
}
|
|
|
|
return $inst_pkgs
|
|
|
|
}
|
|
|
|
|
2011-07-11 23:29:21 +00:00
|
|
|
proc {pkg upgr} {} {
|
2011-06-28 00:20:31 +00:00
|
|
|
#webif - 0.5.3 - 0.5.7
|
|
|
|
set upgr_pkgs {}
|
|
|
|
foreach pkg [split [exec /bin/opkg list-upgradable] "\n"] {
|
2011-07-11 23:29:21 +00:00
|
|
|
if {[regexp {^([^ ]+)} $pkg name] == 0} { continue }
|
|
|
|
lappend upgr_pkgs $name
|
|
|
|
#puts "Upgr: $name<br>"
|
2011-06-28 00:20:31 +00:00
|
|
|
}
|
|
|
|
return $upgr_pkgs
|
|
|
|
}
|
|
|
|
|
2011-07-11 23:29:21 +00:00
|
|
|
proc {pkg loadmeta} {} {
|
|
|
|
if {[llength $::pkgmeta]} { return }
|
|
|
|
if {![file exists "/mod/var/pkg.meta"]} {
|
|
|
|
pkg fetchmeta
|
|
|
|
} else {
|
|
|
|
set meta [open "/mod/var/pkg.meta" r]
|
|
|
|
set ::pkgmeta [read $meta]
|
|
|
|
$meta close
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {pkg fetchmeta} {} {
|
|
|
|
set f [socket stream hummypkg.org.uk:80]
|
|
|
|
$f puts -nonewline "GET /pkg.meta HTTP/1.1\r\n"
|
|
|
|
$f puts -nonewline "Host: hummypkg.org.uk\r\n"
|
|
|
|
$f puts -nonewline "\r\n"
|
|
|
|
|
|
|
|
set line [string trim [$f gets]]
|
|
|
|
while {[string length $line]} {
|
|
|
|
set line [string trim [$f gets]]
|
|
|
|
}
|
|
|
|
set ::pkgmeta [$f read]
|
|
|
|
$f close
|
|
|
|
|
|
|
|
set ff [open "/mod/var/pkg.meta" w]
|
|
|
|
puts $ff $::pkgmeta
|
|
|
|
$ff close
|
|
|
|
}
|
|
|
|
|