2011-09-02 19:50:10 +00:00
|
|
|
|
2015-04-10 22:01:51 +00:00
|
|
|
source /mod/webif/lib/setup
|
|
|
|
|
2012-01-13 21:23:03 +00:00
|
|
|
if {![exists -proc class]} { package require oo }
|
|
|
|
if {![exists -proc sqlite3.open]} { package require sqlite3 }
|
2014-02-18 21:34:44 +00:00
|
|
|
if {![exists -proc binary]} { package require binary }
|
2011-09-02 19:50:10 +00:00
|
|
|
|
|
|
|
class system {}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system model} {} {{model ""}} {
|
|
|
|
if {$model ne ""} { return $model }
|
2011-09-02 19:50:10 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2012-06-15 21:34:07 +00:00
|
|
|
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
|
2014-12-30 14:56:45 +00:00
|
|
|
$fp close
|
2012-06-15 21:34:07 +00:00
|
|
|
}
|
|
|
|
return $ip
|
|
|
|
}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system modversion} {{short 0}} {{modver ""}} {
|
|
|
|
if {$modver eq ""} {
|
|
|
|
if {[catch {set fp [open /etc/modversion r]}]} {
|
|
|
|
set modver "102"
|
|
|
|
} else {
|
|
|
|
set modver [string trim [read $fp]]
|
|
|
|
close $fp
|
|
|
|
}
|
2011-09-14 19:59:56 +00:00
|
|
|
}
|
2011-11-12 23:57:19 +00:00
|
|
|
if {$short} { return $modver }
|
2011-09-14 19:59:56 +00:00
|
|
|
lassign [split $modver ""] a b c
|
|
|
|
return [format "%d.%d%d" $a $b $c]
|
|
|
|
}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system modbuild} {} {{modbuild ""}} {
|
|
|
|
if {$modbuild ne ""} { return $modbuild }
|
2014-12-30 14:56:45 +00:00
|
|
|
if {[catch {set modbuild [string trim [file read /etc/modbuild]]}]} {
|
2014-12-29 22:28:51 +00:00
|
|
|
set modbuild 0
|
2013-01-03 22:20:57 +00:00
|
|
|
}
|
2014-12-30 14:56:45 +00:00
|
|
|
return $modbuild
|
2013-01-03 22:20:57 +00:00
|
|
|
}
|
|
|
|
|
2015-02-17 20:44:16 +00:00
|
|
|
proc {system lastbootreason} {{descr 1}} {{lbr -1}} {
|
|
|
|
if {$lbr == -1} {
|
|
|
|
set lbr 0
|
|
|
|
if {[file readable /tmp/.lbr]} {
|
|
|
|
set lbr [file read /tmp/.lbr]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if {!$descr} { return $lbr }
|
|
|
|
switch $lbr {
|
|
|
|
1 { return "Front panel button" }
|
|
|
|
2 { return "Remote control handset" }
|
|
|
|
3 { return "Scheduled event" }
|
|
|
|
}
|
|
|
|
return "Unknown ($lbr)"
|
|
|
|
}
|
|
|
|
|
2015-08-14 19:33:25 +00:00
|
|
|
proc {system idletime} {} {
|
|
|
|
if {[file exists "/tmp/.lastir"]} {
|
|
|
|
return $([clock seconds] - [file mtime "/tmp/.lastir"])
|
|
|
|
}
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system fhtcpversion} {} {{ver ""}} {
|
|
|
|
if {$ver ne ""} { return $ver }
|
2012-06-03 20:12:31 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2016-03-12 19:39:34 +00:00
|
|
|
# c0400 System ID
|
|
|
|
# c8c00 MAC address
|
|
|
|
# cb800 Serial Number
|
|
|
|
|
|
|
|
proc {system systemid} {} {{id ""}} {
|
|
|
|
if {$id ne ""} { return $id }
|
|
|
|
set fd [open /dev/mtd3 r]
|
|
|
|
|
|
|
|
$fd seek 0xc0400
|
|
|
|
set bytes [$fd read 4]
|
|
|
|
$fd close
|
|
|
|
binary scan $bytes H* hex
|
|
|
|
set id [format "%s.%s" [string range $hex 0 3] [string range $hex 4 end]]
|
|
|
|
return $id
|
|
|
|
}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system serialno} {} {{serial ""}} {
|
|
|
|
if {$serial ne ""} { return $serial }
|
2014-07-06 20:11:59 +00:00
|
|
|
set fd [open /dev/mtd3 r]
|
|
|
|
|
2016-03-12 19:39:34 +00:00
|
|
|
$fd seek 0xcb800
|
2014-07-06 20:11:59 +00:00
|
|
|
set bytes [$fd read 14]
|
|
|
|
$fd close
|
2014-12-29 22:28:51 +00:00
|
|
|
set serial "[string range $bytes 0 1] [string range $bytes 2 8] [
|
2014-07-06 20:11:59 +00:00
|
|
|
string range $bytes 9 end]"
|
2014-12-29 22:28:51 +00:00
|
|
|
return $serial
|
2014-07-06 20:11:59 +00:00
|
|
|
}
|
|
|
|
|
2016-03-12 19:39:34 +00:00
|
|
|
proc {system loaderver} {} {{ver ""}} {
|
|
|
|
if {$ver ne ""} { return $ver }
|
|
|
|
set fd [open /dev/mtd3 r]
|
|
|
|
$fd seek 0x20006
|
|
|
|
set bytes [$fd read 2]
|
|
|
|
$fd close
|
|
|
|
set ver [switch $bytes {
|
|
|
|
"\x04\x5f" { format "a7.30" }
|
|
|
|
"\xec\xe5" { format "a7.31" }
|
|
|
|
"\x59\x9d" { format "a7.33" }
|
|
|
|
"\x72\x5c" { format "a7.34" }
|
|
|
|
"\x8f\x7c" { format "L7.27" }
|
|
|
|
default {
|
|
|
|
binary scan $bytes H* hex
|
|
|
|
format "Unknown - $hex"
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
return $ver
|
|
|
|
}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system kernelver} {} {{ver ""}} {
|
|
|
|
if {$ver ne ""} { return $ver }
|
2014-04-22 00:03:29 +00:00
|
|
|
#1 SMP Sun Mar 25 18:30:38 KST 2012
|
2014-12-29 22:28:51 +00:00
|
|
|
set rver [string range [exec uname -v] 11 end]
|
|
|
|
set ver [switch $rver {
|
2014-04-22 00:03:29 +00:00
|
|
|
# HDR
|
|
|
|
"Sep 16 20:17:56 KST 2010" { format "HDR_1.01.05" }
|
|
|
|
"Oct 11 21:11:05 KST 2010" { format "HDR_1.01.09" }
|
|
|
|
"Jan 21 15:44:39 KST 2011" { format "HDR_1.02.07" }
|
|
|
|
"Jun 11 00:54:19 KST 2011" { format "HDR_1.02.20" }
|
|
|
|
"Mar 25 18:30:38 KST 2012" { format "HDR_1.02.27" }
|
|
|
|
"May 27 00:19:34 KST 2012" { format "HDR_1.02.28" }
|
2014-04-30 21:15:31 +00:00
|
|
|
"Jul 5 11:11:28 KST 2012" { format "HDR_1.02.29" }
|
2014-04-22 00:03:29 +00:00
|
|
|
"Jan 12 16:49:05 KST 2013" { format "HDR_1.02.32" }
|
2014-04-30 21:15:31 +00:00
|
|
|
"Mar 6 07:27:02 KST 2013" { format "HDR_1.03.06(a)" }
|
|
|
|
"May 8 14:32:30 KST 2013" { format "HDR_1.03.06(b)" }
|
2014-04-22 00:03:29 +00:00
|
|
|
"Dec 10 14:36:54 KST 2013" { format "HDR_1.03.11" }
|
2014-04-30 21:15:31 +00:00
|
|
|
"Feb 7 14:15:02 KST 2014" { format "HDR_1.03.12" }
|
2014-06-19 21:34:48 +00:00
|
|
|
"May 19 22:39:27 BST 2014" { format "HDR_CFW_3.00" }
|
2015-02-22 16:13:36 +00:00
|
|
|
"Feb 19 20:58:57 GMT 2015" { format "HDR_CFW_3.03" }
|
2016-03-12 19:39:34 +00:00
|
|
|
"Mar 11 23:34:27 GMT 2016" { format "HDR_CFW_3.10" }
|
|
|
|
"Mar 11 23:37:22 GMT 2016" { format "HDR_CFW_3.10d" }
|
2014-04-22 00:03:29 +00:00
|
|
|
|
|
|
|
# HD
|
|
|
|
"Oct 11 21:14:31 KST 2010" { format "HD_1.01.12" }
|
|
|
|
"May 17 14:16:20 KST 2011" { format "HD_1.02.18" }
|
|
|
|
"Jun 11 00:54:19 KST 2011" { format "HD_1.02.20" }
|
|
|
|
"Mar 25 07:09:19 KST 2012" { format "HD_1.02.27" }
|
|
|
|
"May 27 00:19:40 KST 2012" { format "HD_1.02.28" }
|
2014-04-30 21:15:31 +00:00
|
|
|
"Jul 5 19:41:17 KST 2012" { format "HD_1.02.29" }
|
2014-04-22 00:03:29 +00:00
|
|
|
"Oct 13 12:48:09 KST 2012" { format "HD_1.02.31" }
|
2015-01-15 23:51:58 +00:00
|
|
|
"Dec 9 14:15:07 KST 2014" { format "HD_1.03.02" }
|
2014-04-22 00:03:29 +00:00
|
|
|
|
2015-01-15 23:51:58 +00:00
|
|
|
default { format "Unknown - $rver" }
|
2014-04-22 00:03:29 +00:00
|
|
|
}]
|
2014-12-29 22:28:51 +00:00
|
|
|
return $ver
|
2014-04-22 00:03:29 +00:00
|
|
|
}
|
|
|
|
|
2016-02-08 15:32:17 +00:00
|
|
|
# Newer version below is over 100 times faster
|
|
|
|
#proc {system pkgver} {{pkg webif}} {
|
|
|
|
# return [lrange [split [exec opkg list-installed $pkg] " "] 2 end]
|
|
|
|
#}
|
|
|
|
|
2011-09-25 18:25:09 +00:00
|
|
|
proc {system pkgver} {{pkg webif}} {
|
2016-02-08 15:32:17 +00:00
|
|
|
if {[catch {set fp [open /mod/var/opkg/info/$pkg.control r]}]} {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
set v 0
|
|
|
|
foreach line [split [$fp read] "\n"] {
|
|
|
|
if {[string equal -length 9 $line "Version: "]} {
|
|
|
|
lassign $line x v
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$fp close
|
|
|
|
return $v
|
2011-09-25 18:25:09 +00:00
|
|
|
}
|
|
|
|
|
2014-07-08 18:30:02 +00:00
|
|
|
proc {system pkginst} {pkg} {
|
|
|
|
return [file exists "/mod/var/opkg/info/$pkg.control"]
|
2011-11-28 15:24:38 +00:00
|
|
|
}
|
|
|
|
|
2011-10-31 13:47:47 +00:00
|
|
|
proc {system mediaroot} {} {
|
|
|
|
switch [system model] {
|
|
|
|
HDR { return "/media/My Video" }
|
|
|
|
HD { return "/media/drive1/Video" }
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
2015-08-14 19:33:25 +00:00
|
|
|
proc {system dlnastatus} {} {
|
|
|
|
return [system is_listening 9000]
|
|
|
|
}
|
|
|
|
|
2015-01-28 00:08:09 +00:00
|
|
|
proc {system dlnadb} {} {
|
|
|
|
switch [system model] {
|
|
|
|
HDR { return "/mnt/hd2/dms_cds.db" }
|
|
|
|
HD { return "/media/drive1/dms_cds.db" }
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
2015-04-21 22:08:41 +00:00
|
|
|
proc {system _dlnaurl} {file urlbase} {
|
2015-04-10 22:01:51 +00:00
|
|
|
set mime "video/ts"
|
2015-08-14 19:33:25 +00:00
|
|
|
if {[catch {set db [sqlite3.open [system dlnadb]]}]} {
|
|
|
|
return {}
|
|
|
|
}
|
2015-04-10 22:01:51 +00:00
|
|
|
set muri [$db query {
|
|
|
|
select tblresource.mimetype, contenturi
|
|
|
|
from tblresource join tblmedia using (mediaid)
|
|
|
|
where localurl = '%s'} $file]
|
|
|
|
if {[llength $muri]} {
|
|
|
|
lassign [lindex $muri 0] x mime x xuri
|
|
|
|
} else {
|
|
|
|
# Try for partially linked entry
|
|
|
|
set muri [$db query {
|
|
|
|
select mediaid from tblmedia
|
|
|
|
where localurl = '%s'
|
|
|
|
} $file]
|
|
|
|
if {![llength $muri]} { return {} }
|
|
|
|
lassign [lindex $muri 0] x mediaid
|
|
|
|
set xuri "media/$mediaid.TS"
|
|
|
|
}
|
|
|
|
|
|
|
|
$db close
|
|
|
|
|
|
|
|
set url "http://${urlbase}:9000/web/$xuri"
|
|
|
|
|
|
|
|
return [list $url $mime]
|
|
|
|
}
|
|
|
|
|
2015-04-21 22:08:41 +00:00
|
|
|
proc {system dlnaurl} {file {urlbase ""}} {
|
|
|
|
if {$urlbase eq ""} { set urlbase [system ip] }
|
|
|
|
set retries 5
|
|
|
|
set ret {}
|
|
|
|
while {$retries > 0 && [\
|
|
|
|
catch {set ret [system _dlnaurl $file $urlbase]}]} {
|
|
|
|
incr retries -1
|
|
|
|
sleep 1
|
|
|
|
}
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
2015-04-10 22:01:51 +00:00
|
|
|
proc {system dlnahelper} {file {urlbase ""}} {
|
|
|
|
set dir /mnt/hd2/mod/.dlnahelper
|
|
|
|
require lock
|
|
|
|
|
|
|
|
if {$file eq "-release"} {
|
|
|
|
release_lock dlnahelper
|
|
|
|
return {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if {![acquire_lock dlnahelper 2]} { return {} }
|
|
|
|
|
|
|
|
if {![file isdirectory $dir]} { file mkdir $dir }
|
|
|
|
|
|
|
|
set base [file rootname $file]
|
|
|
|
foreach ext {hmt ts} {
|
|
|
|
file delete "$dir/helper.$ext"
|
|
|
|
file link -symbolic "$dir/helper.$ext" "$base.$ext"
|
|
|
|
}
|
|
|
|
|
|
|
|
set ret [system dlnaurl "$dir/helper.ts" $urlbase]
|
|
|
|
if {![llength $ret]} {
|
|
|
|
# Manually import the helper file.
|
|
|
|
if {![catch {set db [sqlite3.open [system dlnadb]]}]} {
|
|
|
|
$db query {
|
|
|
|
insert into tblmedia
|
|
|
|
(localurl,folder,mediatype,refcount)
|
|
|
|
values('%s','%s',0,1)
|
|
|
|
} "$dir/helper.ts" $dir
|
|
|
|
$db close
|
|
|
|
set ret [system dlnaurl "$dir/helper.ts" $urlbase]
|
|
|
|
}
|
|
|
|
}
|
2015-07-19 20:49:22 +00:00
|
|
|
if {![llength $ret]} {
|
|
|
|
release_lock dlnahelper
|
|
|
|
}
|
2015-04-10 22:01:51 +00:00
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
2012-01-14 00:12:07 +00:00
|
|
|
proc {system dustbin} {{short 0}} {
|
2012-01-14 23:08:54 +00:00
|
|
|
set dustbin "\[Deleted Items\]"
|
2012-01-13 23:28:48 +00:00
|
|
|
if {![catch {set fd [open "/mod/boot/dustbin.name" r]}]} {
|
|
|
|
set dustbin [lindex [split [read $fd] "\n"] 0]
|
|
|
|
$fd close
|
2012-01-10 19:51:45 +00:00
|
|
|
}
|
2012-01-14 00:12:07 +00:00
|
|
|
if {$short} { return $dustbin }
|
2012-01-13 23:28:48 +00:00
|
|
|
return "[system mediaroot]/$dustbin"
|
2012-01-10 19:51:45 +00:00
|
|
|
}
|
|
|
|
|
2014-10-14 22:08:31 +00:00
|
|
|
proc {system dustbinsize} {} {
|
|
|
|
set bin [system dustbin]
|
|
|
|
set ret 0
|
|
|
|
if {[file isdirectory $bin]} {
|
2015-02-09 21:59:14 +00:00
|
|
|
if {[catch {
|
|
|
|
lassign [exec /mod/bin/busybox/du -s $bin] ret
|
|
|
|
}]} {
|
|
|
|
set ret 0
|
|
|
|
}
|
2014-10-14 22:08:31 +00:00
|
|
|
}
|
|
|
|
return $($ret * 1024)
|
|
|
|
}
|
|
|
|
|
2014-05-31 14:50:12 +00:00
|
|
|
proc {system diskpart} {} {
|
2011-09-02 19:50:10 +00:00
|
|
|
switch [system model] {
|
2014-05-31 14:50:12 +00:00
|
|
|
HDR { return "/mnt/hd2" }
|
|
|
|
HD { return "/media/drive1" }
|
2011-09-02 19:50:10 +00:00
|
|
|
}
|
2015-02-05 00:23:08 +00:00
|
|
|
return ""
|
2014-05-31 14:50:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
proc {system diskdev} {} {
|
|
|
|
set part [system diskpart]
|
2014-05-28 18:10:58 +00:00
|
|
|
foreach line [split [\
|
|
|
|
exec /mod/bin/busybox/df $part 2>>/dev/null] "\n\r"] {
|
|
|
|
if {[string match "/*" $line]} {
|
|
|
|
lassign [split $line] dev
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $dev
|
|
|
|
}
|
2011-09-02 19:50:10 +00:00
|
|
|
|
2014-05-28 18:10:58 +00:00
|
|
|
proc {system disk} {} {
|
|
|
|
return [string range [system diskdev] 0 end-1]
|
|
|
|
}
|
|
|
|
|
2016-02-06 00:13:44 +00:00
|
|
|
proc {system disktemp} {} {
|
|
|
|
if {[catch {
|
2016-02-21 23:59:57 +00:00
|
|
|
set smart [exec /bin/smartctl -A [system disk] | grep ^194]
|
2016-02-06 13:57:05 +00:00
|
|
|
regsub -all -- {[[:space:]]+} $smart " " smart
|
|
|
|
set temp [lindex [split $smart] 9]
|
2016-02-06 00:13:44 +00:00
|
|
|
}]} {
|
|
|
|
set temp 0
|
|
|
|
}
|
|
|
|
return $($temp + 0)
|
|
|
|
}
|
|
|
|
|
2014-05-31 14:50:12 +00:00
|
|
|
require pretty_size
|
2014-05-28 18:10:58 +00:00
|
|
|
|
2014-05-31 14:50:12 +00:00
|
|
|
proc {system diskspace} {{raw 0}} {
|
|
|
|
set part [system diskpart]
|
2014-05-28 18:10:58 +00:00
|
|
|
|
2014-05-31 14:50:12 +00:00
|
|
|
lassign [exec /mod/bin/busybox/stat -f -c {%S %b %f} $part] \
|
|
|
|
bsize blocks fblocks
|
2014-05-28 18:10:58 +00:00
|
|
|
|
|
|
|
set size $($bsize * $blocks)
|
|
|
|
set free $($bsize * $fblocks)
|
|
|
|
set used $($size - $free)
|
|
|
|
set perc $($used * 100 / $size)
|
|
|
|
set fperc $(100 - $perc)
|
|
|
|
|
2014-06-06 23:24:32 +00:00
|
|
|
switch [system model] {
|
2015-08-14 19:33:25 +00:00
|
|
|
HDR {
|
|
|
|
set tsrdir "/mnt/hd2/Tsr"
|
|
|
|
set tsrok [file isdirectory $tsrdir]
|
|
|
|
}
|
|
|
|
HD {
|
|
|
|
set tsrdir "/media/drive1/.tsr"
|
|
|
|
set tsrok [file exists "$tsrdir/0.ts"]
|
|
|
|
}
|
2014-06-06 23:24:32 +00:00
|
|
|
}
|
|
|
|
|
2015-08-14 19:33:25 +00:00
|
|
|
if {$tsrok} {
|
2014-06-04 20:35:38 +00:00
|
|
|
set tsrbuf 21474836480
|
2016-03-29 22:03:25 +00:00
|
|
|
if {[catch {
|
|
|
|
lassign [exec du -ks $tsrdir] tsrused
|
|
|
|
}]} {
|
|
|
|
set tsrused 0
|
|
|
|
set tsrbuf 0
|
|
|
|
} else {
|
|
|
|
set tsrused $($tsrused * 1024)
|
|
|
|
}
|
2014-06-04 20:35:38 +00:00
|
|
|
} else {
|
|
|
|
set tsrbuf 0
|
|
|
|
set tsrused 0
|
|
|
|
}
|
|
|
|
|
2014-05-28 18:10:58 +00:00
|
|
|
if {!$raw} {
|
|
|
|
set size [pretty_size $size]
|
|
|
|
set free [pretty_size $free]
|
|
|
|
set used [pretty_size $used]
|
2014-06-04 20:35:38 +00:00
|
|
|
set tsrbuf [pretty_size $tsrbuf]
|
|
|
|
set tsrused [pretty_size $tsrused]
|
2014-05-28 18:10:58 +00:00
|
|
|
}
|
|
|
|
|
2014-06-04 20:35:38 +00:00
|
|
|
return [list $size $used $perc $free $fperc $tsrbuf $tsrused]
|
2014-05-31 14:50:12 +00:00
|
|
|
}
|
2013-02-04 22:32:21 +00:00
|
|
|
|
2014-05-31 14:50:12 +00:00
|
|
|
proc {system diskfree} {} {
|
|
|
|
lassign [exec /mod/bin/busybox/stat -f -c {%S %f} [system diskpart]] \
|
|
|
|
bsize fblocks
|
|
|
|
return $($bsize * $fblocks)
|
2013-02-04 22:32:21 +00:00
|
|
|
}
|
|
|
|
|
2011-09-02 19:50:10 +00:00
|
|
|
proc {system busy} {} {
|
2011-09-26 20:31:17 +00:00
|
|
|
# Is humaxtv doing anything important?
|
2013-11-05 17:39:48 +00:00
|
|
|
if {[catch {set pid [exec /mod/bin/busybox/pgrep -n humaxtv]}]} {
|
2011-11-27 23:29:14 +00:00
|
|
|
return 0
|
|
|
|
}
|
2011-09-02 19:50:10 +00:00
|
|
|
set c 0
|
2014-06-10 17:12:06 +00:00
|
|
|
foreach line [split [\
|
|
|
|
exec /mod/webif/lib/bin/lsof -X -Fn -p $pid] "\n"] {
|
2011-09-26 20:31:17 +00:00
|
|
|
if {[string match {*Video*.ts} $line]} { incr c }
|
|
|
|
}
|
2011-09-02 19:50:10 +00:00
|
|
|
if {$c > 0} { return 1 }
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2012-01-30 21:59:18 +00:00
|
|
|
proc {system inuse} {file} {
|
2015-09-30 18:30:16 +00:00
|
|
|
if {![file exists $file]} { return 0 }
|
2014-06-10 17:12:06 +00:00
|
|
|
set op [exec /mod/webif/lib/bin/lsof -X -Fn $file]
|
2015-09-30 18:30:16 +00:00
|
|
|
switch -glob -- $op {
|
|
|
|
"" -
|
|
|
|
"*status error*" { return 0 }
|
2014-02-18 21:34:44 +00:00
|
|
|
}
|
2015-09-30 18:30:16 +00:00
|
|
|
return 1
|
2014-06-10 17:12:06 +00:00
|
|
|
}
|
2014-02-18 21:34:44 +00:00
|
|
|
|
2014-06-10 17:12:06 +00:00
|
|
|
proc {system dirinuse} {dir} {
|
|
|
|
set files {}
|
|
|
|
foreach line [split [\
|
|
|
|
exec /mod/webif/lib/bin/lsof -X -Fn +d $dir] "\n"] {
|
|
|
|
if {[string index $line 0] ne "n"} continue
|
|
|
|
lappend files [file tail $line]
|
2012-01-30 21:59:18 +00:00
|
|
|
}
|
2014-06-10 17:12:06 +00:00
|
|
|
return $files
|
2012-01-30 21:59:18 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 20:41:47 +00:00
|
|
|
proc {system reboot} {{fast 0}} {
|
|
|
|
if {$fast} {
|
|
|
|
exec /mod/webif/lib/bin/reboot -f
|
|
|
|
} else {
|
|
|
|
exec /mod/webif/lib/bin/reboot
|
|
|
|
}
|
2011-09-02 19:50:10 +00:00
|
|
|
}
|
|
|
|
|
2014-02-10 23:03:36 +00:00
|
|
|
proc {system restartpending} {{mode 1}} {
|
|
|
|
if {$mode} {
|
|
|
|
close [open /tmp/.restartpending w]
|
|
|
|
} else {
|
|
|
|
file delete /tmp/.restartpending
|
|
|
|
}
|
2011-09-02 19:50:10 +00:00
|
|
|
}
|
|
|
|
|
2012-04-18 20:26:34 +00:00
|
|
|
proc {system param} {param {type Value} {tbl MENUCONFIG}} {
|
2011-09-19 17:11:18 +00:00
|
|
|
if {[catch {set db [sqlite3.open /var/lib/humaxtv/setup.db]} msg]} {
|
2012-04-08 23:26:38 +00:00
|
|
|
return 0
|
2011-09-19 17:11:18 +00:00
|
|
|
}
|
2012-04-08 23:26:38 +00:00
|
|
|
set val 0
|
|
|
|
set ret [$db query "
|
|
|
|
select item$type
|
2012-04-18 20:26:34 +00:00
|
|
|
from TBL_$tbl
|
2012-04-08 23:26:38 +00:00
|
|
|
where itemName = '$param'
|
|
|
|
"]
|
|
|
|
if {[llength $ret] == 1} {
|
|
|
|
lassign [lindex $ret 0] x val
|
2011-09-18 22:19:54 +00:00
|
|
|
}
|
|
|
|
$db close
|
2012-04-08 23:26:38 +00:00
|
|
|
return $val
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {system padding} {} {
|
|
|
|
return [list \
|
|
|
|
[system param START_PADDING_TIME] \
|
|
|
|
[system param STOP_PADDING_TIME] \
|
|
|
|
]
|
2011-09-18 22:19:54 +00:00
|
|
|
}
|
|
|
|
|
2012-04-18 20:26:34 +00:00
|
|
|
proc {system instandby} {} {
|
|
|
|
return [system param LAST_STANDBY Value USERCONFIG]
|
|
|
|
}
|
|
|
|
|
2012-01-10 19:51:45 +00:00
|
|
|
proc {system mkdir_p} {dir} {
|
|
|
|
exec /mod/bin/busybox/mkdir -p $dir
|
|
|
|
}
|
|
|
|
|
2015-10-05 14:51:09 +00:00
|
|
|
proc {system dirblockers} {dir {permitted {".*"}}} {
|
2013-09-21 20:50:58 +00:00
|
|
|
set fl {}
|
2013-09-05 18:52:13 +00:00
|
|
|
foreach e [readdir -nocomplain $dir] {
|
2015-10-05 14:51:09 +00:00
|
|
|
if {$e in {. ..}} continue
|
2013-09-05 18:52:13 +00:00
|
|
|
if {[file isdirectory "$dir/$e"]} {
|
2013-09-21 20:50:58 +00:00
|
|
|
lappend fl $e
|
2015-10-05 14:51:09 +00:00
|
|
|
continue
|
|
|
|
}
|
|
|
|
set flag 1
|
|
|
|
foreach p $permitted {
|
|
|
|
if {[string match -nocase $p $e]} {
|
|
|
|
set flag 0
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if {$flag} {
|
2013-09-21 20:50:58 +00:00
|
|
|
lappend fl $e
|
2013-09-05 18:52:13 +00:00
|
|
|
}
|
|
|
|
}
|
2015-10-05 14:51:09 +00:00
|
|
|
return $fl
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {system rmdir_if_empty} {dir {permitted {".*"}}} {
|
|
|
|
set fl [system dirblockers $dir $permitted]
|
|
|
|
|
|
|
|
if {![llength $fl]} {
|
2013-09-21 20:50:58 +00:00
|
|
|
file delete -force $dir
|
|
|
|
return 1
|
|
|
|
}
|
2015-10-05 14:51:09 +00:00
|
|
|
return 0
|
2013-09-05 18:52:13 +00:00
|
|
|
}
|
|
|
|
|
2012-01-21 01:27:06 +00:00
|
|
|
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]]
|
|
|
|
}
|
|
|
|
|
2015-02-17 20:44:16 +00:00
|
|
|
proc {system logtimestamp} {} {
|
|
|
|
return [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {system _log} {log msg} {
|
|
|
|
set logfd [open $log "a+"]
|
|
|
|
puts $logfd "[system logtimestamp] - $msg"
|
2013-04-03 23:50:25 +00:00
|
|
|
$logfd close
|
2013-04-03 22:42:15 +00:00
|
|
|
}
|
|
|
|
|
2015-02-17 20:44:16 +00:00
|
|
|
proc {system log} {log msg} {
|
|
|
|
system _log "/var/log/$log.log" $msg
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {system plog} {log msg} {
|
|
|
|
system _log "/mod/tmp/$log.log" $msg
|
|
|
|
}
|
|
|
|
|
|
|
|
proc {system notify} {msg} {
|
|
|
|
system plog notify $msg
|
|
|
|
}
|
|
|
|
|
2013-10-26 11:05:47 +00:00
|
|
|
proc {system display} {hdr hd} {
|
|
|
|
if {[system model] eq "HDR"} {
|
|
|
|
exec /sbin/display $hdr
|
|
|
|
} else {
|
|
|
|
exec /sbin/display "\$$hd"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-03-12 19:39:34 +00:00
|
|
|
proc {system tuners} {} {
|
|
|
|
if {[system model] eq "HDR"} {
|
|
|
|
return 2
|
|
|
|
} else {
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-05-28 21:29:10 +00:00
|
|
|
proc {system uptime} {} {
|
|
|
|
set fd [open /proc/uptime r]
|
|
|
|
set uptime [lindex [split [read $fd]] 0]
|
|
|
|
$fd close
|
|
|
|
return $uptime
|
|
|
|
}
|
|
|
|
|
2014-06-09 20:54:52 +00:00
|
|
|
proc {system filename} {str {extra ""}} {
|
|
|
|
# Humax TV replaces these characters.
|
|
|
|
# "%*./:<>?\|
|
|
|
|
set chars "\"%*\./:<>?\\\\|$extra"
|
2015-02-05 00:23:08 +00:00
|
|
|
return [regsub -all -- "\[$chars]" $str "_"]
|
2014-06-09 20:54:52 +00:00
|
|
|
}
|
|
|
|
|
2014-10-08 00:25:31 +00:00
|
|
|
proc {system connectivity} {{site "hpkg.tv"} {port 80} {ret "0"}} {
|
|
|
|
set extra [lassign [exec /mod/bin/tcpping $site $port] result]
|
|
|
|
if {$ret ne "0"} { upvar $ret err }
|
|
|
|
switch $result {
|
|
|
|
OK { return 1 }
|
|
|
|
default {
|
|
|
|
set err [list $result $extra]
|
|
|
|
return 0
|
|
|
|
}
|
2014-08-28 18:44:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-07 00:49:22 +00:00
|
|
|
proc {system strip} {str} {
|
|
|
|
if {[string range $str 1 2] eq "i7"} {
|
|
|
|
set str [string range $str 3 end]
|
|
|
|
}
|
|
|
|
if {[string first "\025" $str] == 0} {
|
|
|
|
set str [string range $str 1 end]
|
|
|
|
}
|
|
|
|
return $str
|
|
|
|
}
|
|
|
|
|
2015-01-22 23:21:19 +00:00
|
|
|
proc {system usbdisks} {{full 0}} {
|
2015-02-05 23:14:52 +00:00
|
|
|
set disks [lmap i [glob -nocomplain \
|
|
|
|
-directory /sys/bus/usb/drivers/usb-storage *:*] {
|
|
|
|
file tail $i
|
|
|
|
}]
|
2015-01-22 23:21:19 +00:00
|
|
|
if {!$full} {
|
|
|
|
return [llength $disks]
|
|
|
|
}
|
|
|
|
if {![llength $disks]} { return {} }
|
|
|
|
|
|
|
|
# Build list of device to device ID
|
|
|
|
set map {}
|
|
|
|
foreach block [glob -nocomplain -directory /sys/block sd?] {
|
2015-02-05 23:14:52 +00:00
|
|
|
set link [file readlink $block/device]
|
2015-01-22 23:21:19 +00:00
|
|
|
foreach disk $disks {
|
|
|
|
if {[string first "/$disk/" $link] >= 0} {
|
2015-02-05 23:19:20 +00:00
|
|
|
set map([file tail $block]) $disk
|
2015-01-22 23:21:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $map
|
|
|
|
}
|
|
|
|
|
2014-12-29 22:28:51 +00:00
|
|
|
proc {system usbmounts} {{full 0}} {
|
|
|
|
if {!$full} {
|
|
|
|
set num 0
|
|
|
|
catch {
|
|
|
|
set num [
|
2016-02-22 23:03:31 +00:00
|
|
|
exec grep -cE {/media/([a-z-]+-)?drive} \
|
2016-02-21 00:22:34 +00:00
|
|
|
/proc/mounts]
|
2014-12-29 22:28:51 +00:00
|
|
|
}
|
|
|
|
return $num
|
|
|
|
}
|
|
|
|
set ret {}
|
|
|
|
if {[catch {
|
2016-02-22 23:03:31 +00:00
|
|
|
set lines [exec grep -E {media/([a-z-]+-)?drive} \
|
2016-02-22 22:42:27 +00:00
|
|
|
/proc/mounts]
|
2014-12-29 22:28:51 +00:00
|
|
|
}]} { return $ret }
|
|
|
|
foreach line [split $lines "\n"] {
|
|
|
|
lassign $line dev mp
|
|
|
|
set rec "DEV $dev MP $mp LABEL {NO NAME} TYPE Unknown"
|
|
|
|
|
2014-12-30 14:56:45 +00:00
|
|
|
set rec(VENDOR) Unknown
|
|
|
|
set rec(MODEL) Unknown
|
|
|
|
|
|
|
|
if {[regexp {/dev/(sd[a-z])} $dev x rdev]} {
|
|
|
|
set rec(RDEV) $rdev
|
|
|
|
if {[file readable [
|
|
|
|
set f /sys/block/$rdev/device/vendor]]} {
|
|
|
|
set rec(VENDOR) [string trim [file read $f]]
|
|
|
|
}
|
|
|
|
if {[file readable [
|
|
|
|
set f /sys/block/$rdev/device/model]]} {
|
|
|
|
set rec(MODEL) [string trim [file read $f]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-30 19:00:15 +00:00
|
|
|
lassign [exec stat -f -c {%S %b %f} $mp] blocks blockc blockf
|
2014-12-29 22:28:51 +00:00
|
|
|
set rec(SIZE) $($blockc * $blocks)
|
2014-12-30 19:00:15 +00:00
|
|
|
set rec(USED) $(100 - $blockf * 100 / $blockc)
|
2014-12-29 22:28:51 +00:00
|
|
|
|
|
|
|
# /dev/sda1: LABEL="SAN" UUID="DBC1-1CF8" TYPE="vfat"
|
|
|
|
catch {
|
|
|
|
foreach field [
|
|
|
|
split [exec /mod/sbin/blkid -c /dev/null $dev] "\n"] {
|
|
|
|
while {[regexp { *([A-Z]+)="?([^"]+)"?(.*)} \
|
|
|
|
$field x k v field]} {
|
|
|
|
set rec($k) $v
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
# Test for EXFAT
|
|
|
|
if {$rec(TYPE) eq "Unknown" && [
|
|
|
|
file exists /mod/sbin/exfatlabel]} {
|
|
|
|
catch {
|
|
|
|
set label [exec /mod/sbin/exfatlabel $dev 2>/dev/null]
|
|
|
|
if {$label ne ""} {
|
|
|
|
set rec(TYPE) "EXFAT"
|
|
|
|
set rec(LABEL) $label
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
lappend ret $rec
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
2015-01-19 21:16:52 +00:00
|
|
|
proc {system has} {comp} {
|
|
|
|
switch $comp {
|
|
|
|
wifi_dongle {
|
2015-03-09 22:19:12 +00:00
|
|
|
if {[catch {exec /mod/bin/iwgetid}]} { return 0 }
|
2015-01-19 21:16:52 +00:00
|
|
|
return 1
|
|
|
|
}
|
2015-03-09 22:19:12 +00:00
|
|
|
tvdb {
|
2015-10-12 21:14:34 +00:00
|
|
|
require settings.class
|
|
|
|
return [[settings] _nval_setting tvdb]
|
2015-03-09 22:19:12 +00:00
|
|
|
}
|
2015-01-19 21:16:52 +00:00
|
|
|
}
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|