webif/var/mongoose/lib/system.class

167 lines
3.7 KiB
Plaintext
Raw Normal View History

if {![exists -proc class]} { package require oo }
if {![exists -proc sqlite3.open]} { package require sqlite3 }
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 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 pkgver} {{pkg webif}} {
return [lrange [split [exec opkg list-installed $pkg] " "] 2 end]
}
proc {system pkginst} {pkg} {
if {[exec opkg list-installed $pkg] ne ""} {
return 1 } else { 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 perc 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 size [lindex $fields 1]
set used [lindex $fields 2]
set perc [string trimright [lindex $fields 4] "%"]
break
}
}
return [list $size $used $perc]
}
proc {system busy} {} {
# Is humaxtv doing anything important?
if {[catch {set pid [exec /mod/bin/busybox/pgrep 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 humaxtv using the file?
if {[catch {set pid [exec /mod/bin/busybox/pgrep humaxtv]}]} {
return 0
}
regsub -all {([\\["$])} [file rootname [file tail $file]] {\\\1} file
set c 0
foreach line [split [exec /mod/bin/lsof -p $pid] "\n"] {
if {[string match "*$file*" $line]} { incr c }
}
if {$c > 0} { return 1 }
return 0
}
proc {system reboot} {} {
exec /etc/init.d/S90settop shut
exec /sbin/reboot
}
proc {system restartpending} {} {
close [open /tmp/.restartpending w]
}
proc {system padding} {} {
set start 0
set stop 0
if {[catch {set db [sqlite3.open /var/lib/humaxtv/setup.db]} msg]} {
return {0 0}
}
foreach l [$db query "
select itemName, itemValue
from TBL_MENUCONFIG
where itemName in ('START_PADDING_TIME', 'STOP_PADDING_TIME')
"] {
lassign $l x name x val
switch $name {
"START_PADDING_TIME" { set start $val }
"STOP_PADDING_TIME" { set stop $val }
}
}
$db close
return [list $start $stop]
}
proc {system mkdir_p} {dir} {
exec /mod/bin/busybox/mkdir -p $dir
}
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]]
}