forked from hummypkg/webif
23cc31a02a
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1786 2a923420-c742-0410-a762-8d5b09965624
300 lines
6.4 KiB
Plaintext
300 lines
6.4 KiB
Plaintext
|
|
if {![exists -proc class]} { package require oo }
|
|
if {![exists -proc sqlite3.open]} { package require sqlite3 }
|
|
if {![exists -proc binary]} { package require binary }
|
|
|
|
class system {}
|
|
|
|
proc {system model} {} {
|
|
if {[catch {set fp [open /etc/model r]}]} {
|
|
set model {HD[R]}
|
|
} else {
|
|
set model [string trim [read $fp]]
|
|
close $fp
|
|
}
|
|
return $model
|
|
}
|
|
|
|
proc {system hostname} {} {
|
|
if {[catch {set hostname [string trim [exec hostname]]}]} {
|
|
set hostname "humax"
|
|
}
|
|
return $hostname
|
|
}
|
|
|
|
proc {system ip} {} {
|
|
if {[catch {set fp [open /etc/hosts r]}]} {
|
|
set ip "127.0.0.1"
|
|
} else {
|
|
set ipl [lindex [split [$fp read] "\n"] 1]
|
|
regsub -- {[[:space:]].*} $ipl "" ip
|
|
}
|
|
return $ip
|
|
}
|
|
|
|
proc {system modversion} {{short 0}} {
|
|
if {[catch {set fp [open /etc/modversion r]}]} {
|
|
set modver "102"
|
|
} else {
|
|
set modver [string trim [read $fp]]
|
|
close $fp
|
|
}
|
|
if {$short} { return $modver }
|
|
lassign [split $modver ""] a b c
|
|
return [format "%d.%d%d" $a $b $c]
|
|
}
|
|
|
|
proc {system modbuild} {} {
|
|
if {[catch {set fp [open /etc/modbuild r]}]} {
|
|
return 0
|
|
} else {
|
|
set modbuild [string trim [read $fp]]
|
|
close $fp
|
|
}
|
|
return $modbuild
|
|
}
|
|
|
|
proc {system fhtcpversion} {} {
|
|
set file "/etc/fhtcpversion"
|
|
if {![file exists $file]} { set file "/root/fhtcpversion" }
|
|
if {[catch {set fp [open $file r]}]} {
|
|
set ver "?.??.??"
|
|
} else {
|
|
set ver [string trim [read $fp]]
|
|
close $fp
|
|
}
|
|
return $ver
|
|
}
|
|
|
|
proc {system pkgver} {{pkg webif}} {
|
|
return [lrange [split [exec opkg list-installed $pkg] " "] 2 end]
|
|
}
|
|
|
|
proc {system pkginst} {pkg} {{cache {}} {ncache {}}} {
|
|
if {$pkg in $cache} { return 1 }
|
|
if {$pkg in $ncache} { return 0 }
|
|
|
|
# It may not be possible to get an opkg lock immediately so
|
|
# try several times and throw an error if not.
|
|
set status unknown
|
|
loop i 0 5 {
|
|
if {[catch {set status [exec opkg list-installed $pkg]}]} {
|
|
sleep 1
|
|
} else break
|
|
}
|
|
if {$status eq "unknown"} {
|
|
error "Could not get opkg lock after 5 seconds."
|
|
}
|
|
|
|
if {$status ne ""} {
|
|
lappend $cache $pkg
|
|
return 1
|
|
}
|
|
lappend $ncache $pkg
|
|
return 0
|
|
}
|
|
|
|
proc {system mediaroot} {} {
|
|
switch [system model] {
|
|
HDR { return "/media/My Video" }
|
|
HD { return "/media/drive1/Video" }
|
|
}
|
|
return ""
|
|
}
|
|
|
|
proc {system dustbin} {{short 0}} {
|
|
set dustbin "\[Deleted Items\]"
|
|
if {![catch {set fd [open "/mod/boot/dustbin.name" r]}]} {
|
|
set dustbin [lindex [split [read $fd] "\n"] 0]
|
|
$fd close
|
|
}
|
|
if {$short} { return $dustbin }
|
|
return "[system mediaroot]/$dustbin"
|
|
}
|
|
|
|
proc {system diskspace} {} {
|
|
switch [system model] {
|
|
HDR { set part /mnt/hd2 }
|
|
HD { set part /media/drive1 }
|
|
}
|
|
|
|
set size 0
|
|
set used 0
|
|
set free 0
|
|
set perc 0
|
|
set dev 0
|
|
foreach line [split [exec /mod/bin/busybox/df -h $part 2>>/dev/null] "\n\r"] {
|
|
if {[string match "/*" $line]} {
|
|
regsub -all -- {[[:space:]]+} $line " " line
|
|
set fields [split $line]
|
|
set dev [lindex $fields 0]
|
|
set size [lindex $fields 1]
|
|
set used [lindex $fields 2]
|
|
set free [lindex $fields 3]
|
|
set perc [string trimright [lindex $fields 4] "%"]
|
|
set fperc $(100 - $perc)
|
|
break
|
|
}
|
|
}
|
|
|
|
return [list $size $used $perc $free $fperc $dev]
|
|
}
|
|
|
|
proc {system disk} {} {
|
|
return [string range [lindex [system diskspace] 5] 0 end-1]
|
|
}
|
|
|
|
proc {system diskfree} {} {
|
|
switch [system model] {
|
|
HDR { set part /mnt/hd2 }
|
|
HD { set part /media/drive1 }
|
|
}
|
|
|
|
set free 0
|
|
foreach line [split [exec /mod/bin/busybox/df -k $part 2>>/dev/null] "\n\r"] {
|
|
if {[string match "/*" $line]} {
|
|
regsub -all -- {[[:space:]]+} $line " " line
|
|
set fields [split $line]
|
|
set free [lindex $fields 3]
|
|
set free $($free * 1024)
|
|
break
|
|
}
|
|
}
|
|
|
|
return $free
|
|
}
|
|
|
|
proc {system busy} {} {
|
|
# Is humaxtv doing anything important?
|
|
if {[catch {set pid [exec /mod/bin/busybox/pgrep -n humaxtv]}]} {
|
|
return 0
|
|
}
|
|
set c 0
|
|
foreach line [split [exec /mod/bin/lsof -p $pid] "\n"] {
|
|
if {[string match {*Video*.ts} $line]} { incr c }
|
|
}
|
|
if {$c > 0} { return 1 }
|
|
return 0
|
|
}
|
|
|
|
proc {system inuse} {file} {
|
|
# Is anything using the file?
|
|
set file [file rootname [file tail $file]]
|
|
|
|
# Escape any unicode characters to match lsof output.
|
|
foreach range [lreverse [\
|
|
regexp -inline -indices -all -- {[\x80-\xff]} $file]] {
|
|
set i [lindex $range 0]
|
|
binary scan [string index $file $i] H2 hex
|
|
set file [string replace $file $i $i "\\x$hex"]
|
|
}
|
|
|
|
set c 0
|
|
foreach line [split [exec /mod/bin/lsof] "\n"] {
|
|
if {[string first $file $line] >= 0} { incr c }
|
|
}
|
|
if {$c > 0} { return 1 }
|
|
return 0
|
|
}
|
|
|
|
proc {system reboot} {} {
|
|
exec /etc/init.d/S90settop shut
|
|
exec /sbin/reboot
|
|
}
|
|
|
|
proc {system restartpending} {{mode 1}} {
|
|
if {$mode} {
|
|
close [open /tmp/.restartpending w]
|
|
} else {
|
|
file delete /tmp/.restartpending
|
|
}
|
|
}
|
|
|
|
proc {system param} {param {type Value} {tbl MENUCONFIG}} {
|
|
if {[catch {set db [sqlite3.open /var/lib/humaxtv/setup.db]} msg]} {
|
|
return 0
|
|
}
|
|
set val 0
|
|
set ret [$db query "
|
|
select item$type
|
|
from TBL_$tbl
|
|
where itemName = '$param'
|
|
"]
|
|
if {[llength $ret] == 1} {
|
|
lassign [lindex $ret 0] x val
|
|
}
|
|
$db close
|
|
return $val
|
|
}
|
|
|
|
proc {system padding} {} {
|
|
return [list \
|
|
[system param START_PADDING_TIME] \
|
|
[system param STOP_PADDING_TIME] \
|
|
]
|
|
}
|
|
|
|
proc {system instandby} {} {
|
|
return [system param LAST_STANDBY Value USERCONFIG]
|
|
}
|
|
|
|
proc {system mkdir_p} {dir} {
|
|
exec /mod/bin/busybox/mkdir -p $dir
|
|
}
|
|
|
|
proc {system rmdir_if_empty} {dir {why 0}} {
|
|
set fl {}
|
|
foreach e [readdir -nocomplain $dir] {
|
|
if {$e eq "." || $e eq ".."} continue
|
|
if {[file isdirectory "$dir/$e"]} {
|
|
if {!$why} { return 0 }
|
|
lappend fl $e
|
|
} elseif {[string index $e 0] ne "."} {
|
|
if {!$why} { return 0 }
|
|
lappend fl $e
|
|
}
|
|
}
|
|
if {!$why} {
|
|
file delete -force $dir
|
|
return 1
|
|
}
|
|
return $fl
|
|
}
|
|
|
|
proc {system listening} {{mport 0}} {
|
|
set ret {}
|
|
foreach line [split [exec /mod/bin/busybox/netstat -lntpw] "\n"] {
|
|
# Remove repeated spaces
|
|
regsub -all -- {[[:space:]]+} $line " " line
|
|
# tcp 0 0 0.0.0.0:9955 0.0.0.0:* LISTEN 169/humaxtv
|
|
lassign [split $line " "] x x x port x type app
|
|
if {$type ne "LISTEN"} { continue }
|
|
lassign [split $port ":"] x port
|
|
|
|
if {$mport && $mport != $port} { continue }
|
|
lappend ret [list $port [split $app "/"]]
|
|
}
|
|
return $ret
|
|
}
|
|
|
|
proc {system is_listening} {mport} {
|
|
return [llength [system listening $mport]]
|
|
}
|
|
|
|
proc {system notify} {msg} {
|
|
set logfd [open "/mod/tmp/notify.log" "a+"]
|
|
puts $logfd "[\
|
|
clock format [clock seconds] -format "%d/%m/%Y %H:%M"\
|
|
] - $msg"
|
|
$logfd close
|
|
}
|
|
|
|
proc {system display} {hdr hd} {
|
|
if {[system model] eq "HDR"} {
|
|
exec /sbin/display $hdr
|
|
} else {
|
|
exec /sbin/display "\$$hd"
|
|
}
|
|
}
|
|
|