From 050cb611bf0efe93008dd9ddc2fdb401536cb470 Mon Sep 17 00:00:00 2001 From: hummypkg Date: Tue, 28 Jun 2011 00:20:31 +0000 Subject: [PATCH] working on package system git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@209 2a923420-c742-0410-a762-8d5b09965624 --- var/mongoose/cgi-bin/browse/new.jim | 25 +++++++++ var/mongoose/cgi-bin/opkg.jim | 18 +++++++ var/mongoose/html/js/packages.js | 47 ++++++++++++++++ var/mongoose/html/packages.shtml | 6 ++- var/mongoose/include/packages.jim | 83 ++++++++++++++-------------- var/mongoose/lib/opkg | 6 +++ var/mongoose/lib/pkg.class | 84 +++++++++++++++++++++++++++++ 7 files changed, 228 insertions(+), 41 deletions(-) create mode 100755 var/mongoose/cgi-bin/browse/new.jim create mode 100755 var/mongoose/cgi-bin/opkg.jim create mode 100755 var/mongoose/html/js/packages.js create mode 100755 var/mongoose/lib/opkg create mode 100755 var/mongoose/lib/pkg.class diff --git a/var/mongoose/cgi-bin/browse/new.jim b/var/mongoose/cgi-bin/browse/new.jim new file mode 100755 index 0000000..8f452dc --- /dev/null +++ b/var/mongoose/cgi-bin/browse/new.jim @@ -0,0 +1,25 @@ +#!/mod/bin/jimsh + +package require cgi + +puts "Content-Type: application/json" +puts "" + +cgi_input +#cgi_dump + +set _cgi(dir) "/media/My Video" + +set dir [dict get $_cgi dir] +# Strip double slashes +regsub -all -- {\/+} "$dir/*" "/" dir + +puts "{" +foreach subdir [glob -nocomplain "$dir"] { + set new 0 + foreach hmt [glob -nocomplain "$subdir/*.hmt"] { + puts "HMT: $hmt" + } +} +puts "}" + diff --git a/var/mongoose/cgi-bin/opkg.jim b/var/mongoose/cgi-bin/opkg.jim new file mode 100755 index 0000000..eb032b9 --- /dev/null +++ b/var/mongoose/cgi-bin/opkg.jim @@ -0,0 +1,18 @@ +#!/mod/bin/jimsh + +package require cgi + +puts "Content-Type: text/html" +puts "" + +cgi_input +#cgi_dump + +#set _cgi(cmd) {remove binutils} + +if {![dict exists $_cgi cmd]} { set _cgi(cmd) status } + +set cmd [dict get $_cgi cmd] + +puts [exec /mod/var/mongoose/lib/opkg {*}$cmd] + diff --git a/var/mongoose/html/js/packages.js b/var/mongoose/html/js/packages.js new file mode 100755 index 0000000..96ad842 --- /dev/null +++ b/var/mongoose/html/js/packages.js @@ -0,0 +1,47 @@ + +function reset_results() +{ + $('#dresults').empty().val('Running package command, please wait...'); +} + +$(document).ready(function() { + $('button').button(); + + var $dialog = $('#dialogue').dialog({ + title: "Package Management Results", + modal: false, autoOpen: false, + height: 500, width: 700, + show: 'scale', hide: 'fade', + draggable: true, resizable: true, + buttons: { "Close": + function() {$(this).dialog('close');}}, + close: function(e,u) { reset_results(); } + }); + reset_results(); + + var opkg = '/cgi-bin/opkg.jim?cmd='; + + $('#opkgupdate').click(function() { + $('#result_txt').load(opkg + 'update'); + $('#results').show('slow'); + }); + + $('button.remove').click(function() { + $('#dresults').load(opkg + + encodeURIComponent('remove ' + $(this).attr('id'))); + $dialog.dialog('open'); + }); + + $('button.install').click(function() { + $('#dresults').load(opkg + + encodeURIComponent('install ' + $(this).attr('id'))); + $dialog.dialog('open'); + }); + + $('button.upgrade').click(function() { + $('#dresults').load(opkg + + encodeURIComponent('upgrade ' + $(this).attr('id'))); + $dialog.dialog('open'); + }); +}); + diff --git a/var/mongoose/html/packages.shtml b/var/mongoose/html/packages.shtml index b4c35f1..b6e6708 100644 --- a/var/mongoose/html/packages.shtml +++ b/var/mongoose/html/packages.shtml @@ -1,6 +1,8 @@ -

Package Management

+

Package Management + +

+ + 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 { + + + + + + + + + + + + -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 "
PackageInstalledAvailDescription
" -puts "" -puts "" -puts "" -puts "" -puts "" -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 "" + } elseif {[$pkg is upgradable]} { + puts "" } else { - puts "" + puts "" } - puts "" - puts "" - puts "" - puts "" + puts " + + + + + " + + 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 +} +
InstalledNameVersionDescription
" - if {[lsearch $inst_pkgs $name] > -1} { - puts "" + if {![$pkg is installed]} { + puts "
$name$ver$descr$name[$pkg get installed][$pkg get latest][$pkg get descr]