git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2346 2a923420-c742-0410-a762-8d5b09965624
This commit is contained in:
hummypkg 2015-02-17 20:44:16 +00:00
parent 217b08922f
commit 8f7f20b83d
35 changed files with 434 additions and 151 deletions

View File

@ -1,7 +1,7 @@
Package: webif
Priority: optional
Section: web
Version: 1.2.1-7
Version: 1.2.1-8
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
Depends: webif-channelicons(>=1.1.14),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.3),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,mongoose,recmon(>=2.0.2)

View File

@ -54,6 +54,12 @@ fi
hook=/mod/boot/xinit.d/rt3070
[ -f $hook ] && rm -f $hook
# Migrate record log to new name.
(
cd /mod/tmp
[ -f record.log -a ! -f activity.log ] && mv record.log activity.log
)
[ -f $tmpf ] && rm -f $tmpf
exit 0

View File

@ -17,5 +17,6 @@ Humax [system model] Fox T2 ([system hostname])
Custom firmware version: $modver
Web interface version: [system pkgver webif]
Serial Number: [system serialno]
Last Boot Reason: [system lastbootreason]
"

BIN
boot/xinit.d/ahw Executable file

Binary file not shown.

18
etc/init.d/S59webif Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
. /mod/webif/lib/lib.sh
export TZ=GMT+0BST,M3.5.0/1,M10.5.0/2
case "$1" in
start)
/mod/webif/lib/bin/manage_logs
plog activity "System booted (`lbr_descr`)."
;;
stop)
;;
*)
exit 1
;;
esac

View File

@ -15,10 +15,5 @@ set ch [$ts get channel_name]
set dur [$ts duration]
set title [$ts get title]
set msg "Recorded: $dir/$title ($dur minutes - $ch)"
set logfd [open "/mod/tmp/record.log" "a+"]
puts $logfd "[\
clock format [clock seconds] -format "%d/%m/%Y %H:%M"\
] - $msg"
$logfd close
system plog activity "Recorded: $dir/$title ($dur minutes - $ch)"

View File

@ -1,58 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class system.class
httpheader
if {[cgi_get act] eq "cancel"} {
system restartpending 0
exit
}
if {[cgi_get now] eq "yes"} {
# - Busybox reboot does sync the disk but may still not be clean enough.
puts "Restarting."
system reboot
exit
}
system restartpending 0
jqplugin progressbar
header
# Commit pending reservations on older mod versions.
if {![file exists /sbin/rsvsync] && ![file exists /mod/boot/rsvsync]} {
rsv commit
}
puts {
<script type=text/javascript>
var handle = 0;
var pct = 0;
function update()
{
$('#progressbar').reportprogress(++pct);
if (pct == 100)
{
clearInterval(handle);
pct = 0;
window.location = '/';
}
}
$(document).ready(function() {
$('#progressbar').reportprogress(0);
handle = setInterval("update()" , 400);
$.get('/cgi-bin/restart.jim?now=yes');
});
</script>
Please wait while the Humax restarts...<br>
<div id=progressbar></div>
}
footer

View File

@ -1,7 +0,0 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
httpheader
source /mod/webif/include/restart.jim

View File

@ -11,6 +11,7 @@ set schedtime 1200
switch $runmode {
cgi {
set type [cgi_get type "full"]
set schedtime [cgi_get schedtime 1200]
httpheader
}
cli {

View File

@ -60,8 +60,7 @@ $(document).ready(function() {
$('#restore_working').slideUp();
refresh_files();
$('#restore_warning').slideDown();
$('#restart_block').load(
'/cgi-bin/restartblock.jim');
$('#restart_block').slideDown('slow');
});
});
}

View File

@ -456,15 +456,19 @@ div#restart_block
text-align: center;
z-index: 31;
float: right;
width: 60%;
position: absolute;
top: 10px;
left: 100px;
width: 130px;
position: relative;
top: 20px;
background-color: #f8f8f8;
opacity: 0.9;
filter:alpha(opacity=90);
}
button#restart_humaxtv
{
margin-bottom: 3px;
}
img.bmp, img.doublebmp
{
transform: scaleY(-1);

View File

@ -88,7 +88,7 @@ puts {
<tr>
<td colspan=2>
<button id=reboot style="width: 100%">Reboot System</button>
<button id=reboot class=red style="width: 100%">Reboot System</button>
</td>
</tr>

View File

@ -57,14 +57,9 @@ $('#dspace').click(function(e) {
window.location = 'dspace/index.jim';
});
$('#reboot').click(function(e) {
$('#reboot').button({icons:{primary:"ui-icon-power"}}).click(function(e) {
e.preventDefault();
if (confirm('Are you sure you wish to perform a reboot now?'))
if (confirm('Really sure?\n\nThere is a small chance the ' +
' Humax may not restart\n' +
'without physical intervention.\n\n' +
'i.e. pressing the standby button or using the remote control'))
window.location = '/cgi-bin/restart.jim';
window.location = '/restart/index.jim';
});
$('#runreset').click(function(e) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
webif/html/img/bluering.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
webif/html/img/redring.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -7,8 +7,7 @@ $(function() {
'&event=' +
encodeURIComponent($('#dialogue').attr('xe')) +
'&type=' + type, function() {
$('#restart_block')
.load('/cgi-bin/restartblock.jim');
$('#restart_block').slideDown('slow');
});
$(":button:contains('Record')").fadeOut('slow');
$(":button:contains('Reminder')").fadeOut('slow');

6
webif/html/js/restart.js Normal file
View File

@ -0,0 +1,6 @@
$('#restart_humaxtv').button({icons:{primary:"ui-icon-power"}})
.on('click', function(e) {
e.stopPropagation();
window.location = '/restart/index.jim';
});

View File

@ -44,9 +44,6 @@ puts {
}
source /mod/webif/html/lib/topbar.jim
puts "<center><div id=restart_block>"
source /mod/webif/include/restart.jim
puts "</div></center>"
source /mod/webif/include/diskcheck.jim
source /mod/webif/include/notify.jim

View File

@ -9,6 +9,7 @@ puts {
<!-- Start include diskspace - above other items to work around IE feature.. -->
}
source /mod/webif/html/diskspace/diskspace.jim
source /mod/webif/include/restart.jim
puts {
<!-- End include diskspace -->
<img border=0 src=/images/516_1_26_Freeview_Logo.png>

76
webif/html/restart/index.jim Executable file
View File

@ -0,0 +1,76 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require rsv.class system.class
jqplugin progressbar blockui
jscss script.js style.css
header
puts {
<div class="va cleft">
<img class=va src=/img/bluering.png height=40>
<span class=va>Restart Humax...</span>
</div>
<fieldset class=cleft>
<legend><span class=blood><i>
Box status and events for the next two hours
</i></span></legend>
<div id=restart_status>
<span class=blood><img src=/img/loading.gif>
Retrieving status...
</span>
</div>
</fieldset>
}
puts "
<div class=cleft>
<table class=keyval><tr>
<th>Last boot reason</th>
<td>[system lastbootreason]</td>
</tr></table>
"
if {[system lastbootreason 0] == 3} {
puts {
<div class="pinkshade" style="padding: 0.5em; margin: 1em 4em; width: 60%">
<dl>
<dt>WARNING:</dt>
<dd>
The last boot was for a scheduled recording/reminder event. If you reboot
the box in this state, it may end up in standby and require manual
intervention.
</dd>
</dl>
</div>
}
}
puts "
</div>
<div class=cleft>
"
if {[system busy]} {
puts "<div class=blood>
System is busy, cannot restart at the moment.</div>"
} else {
puts {
<div class=cleft>
<button id=restartbutton class=red>Restart the Humax now...</button>
<div id=restarting class=hidden>
Please wait while the Humax restarts...<br>
<div id=xprogressbar></div>
</div>
}
}
puts "</div>"
footer

17
webif/html/restart/restart.jim Executable file
View File

@ -0,0 +1,17 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require system.class
set now [cgi_get now no]
httpheader
if {$now eq "yes"} {
puts "Rebooting..."
system reboot
} else {
puts "Not rebooting..."
}

View File

@ -0,0 +1,45 @@
var handle = 0;
var pct = 0;
function update()
{
$('#progressbar').reportprogress(++pct);
if (pct == 100)
{
clearInterval(handle);
pct = 0;
$.blockUI({
message: '<h1><img src=/img/loading.gif> ' +
'Reconnecting...</h1>',
css: { background: '#ffffcc' }
});
window.location = '/';
}
}
$(function() {
$('#restartbutton').button({icons:{primary:"ui-icon-power"}})
.button('disable')
.on('click', function() {
$(this).button('disable');
$('#restarting').slideDown('slow');
handle = setInterval("update()" , 500);
$.blockUI({
message: '<h1><img src=/img/loading.gif> Restarting...</h1>' +
'<br>' +
'<center><div id=progressbar></div></center>',
css: { background: '#ffffcc' }
});
$('#progressbar').reportprogress(0);
$.get('restart.jim?now=yes');
});
$('#restart_status').load('/cgi-bin/status.jim?schedtime=7200', function() {
$('#restartbutton').button('enable');
});
$('#restart_humaxtv').button('disable').hide();
});

View File

@ -0,0 +1,12 @@
div.cleft
{
padding-top: 1em;
}
#progressbar
{
width: 95%;
margin: 0 0 1em 0;
}

View File

@ -9,8 +9,50 @@ puts -nonewline "
<legend> Advanced Settings </legend>
<table>
"
setting_toggle "Show development and advanced packages?" "pkgdev" $pkgdev
puts -nonewline "
<tr>
<form class=auto id=logsize method=get action=$env(SCRIPT_NAME)>
<th class=key>Rotate logs when they exceed</th>
<td><select name=logsize
class=\"text ui-widget-content ui-corner-all\">
"
set sizes { 102400 262144 524288 1048576 1572864 2097152 }
foreach size $sizes {
puts -nonewline "<option value=$size"
if {$logsize == $size} { puts -nonewline " selected" }
puts ">[pretty_size $size]"
}
puts "
</select>
<small>
<input value=\"set\" type=submit>
</small>
<div id=logsize_output></div>
</td>
</form>
</tr>
"
puts -nonewline "
<tr>
<form class=auto id=logkeep method=get action=$env(SCRIPT_NAME)>
<th class=key>How many rotated logs to keep</th>
<td>
<input name=logkeep size=5 type=number
class=\"text ui-widget-content ui-corner-all\"
maxlength=10 value=\"$logkeep\">
<small>
<input value=\"set\" type=submit>
</small>
<div id=logkeep_output></div>
</td>
</form>
</tr>
"
if {[system modversion 1] >= 214} {
setting_toggle "Expert mode telnet server?" "xtelnet" \
[file exists /mod/boot/xtelnet] 0 1

View File

@ -37,7 +37,6 @@ set smtp_server [$settings smtp_server]
set channel_group [$settings channel_group]
set epg_style [$settings epg_style]
set service_style [$settings service_style]
set pkgdev [$settings pkgdev]
set notoolbar [$settings notoolbar]
set nomobile [$settings nomobile]
set nohelplinks [$settings nohelplinks]
@ -47,8 +46,11 @@ set chanchangenc [$settings chanchangenc]
set xepghours [$settings xepghours]
if {$xepghours == 0} { set xepghours 4 }
set genrededup [$settings genrededup]
set autolog [$settings autolog]
set audiomp3 [$settings audiomp3]
set autolog [$settings autolog]
set pkgdev [$settings pkgdev]
set logsize [$settings logsize]
set logkeep [$settings logkeep]
# Handle updates
@ -87,6 +89,8 @@ handle_int_update xepghours $xepghours "Grid EPG Hours"
handle_str_update epg_style $epg_style "EPG Type"
handle_str_update service_style $service_style "EPG Channel Type"
handle_int_update pkgdev $pkgdev "Development Package Display"
handle_int_update logsize $logsize "Log rotation size"
handle_int_update logkeep $logkeep "Logs to keep"
handle_int_update notoolbar $notoolbar "Disable toolbar"
handle_int_update nomobile $nomobile "Disable mobile link"
handle_int_update nohelplinks $nohelplinks "Disable help links"

View File

@ -17,6 +17,7 @@ catch {set fhtcpversion [system fhtcpversion]}
catch {set kernelver [system kernelver]}
puts "<br>Humax Version: $fhtcpversion (kernel $kernelver)"
puts "<br>Serial Number: [system serialno]"
puts "<br>Last Boot Reason: [system lastbootreason]"
puts "</span>"

View File

@ -1,62 +1,35 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
set class "class=hidden"
if {[file exists /tmp/.restartpending]} {
require system.class rsv.class
if {[rsv count pending] > 0} {
puts {
<center>
<div style="width: 100%; height: 0.7em;
background: url(/img/stripes.gif) repeat-x;"></div>
<div style="font-size: 1.2em; width: 60%; text-align: center; padding: 0.5em">
A restart is required in order to complete a scheduling operation or
system settings change.
<br>
<font class=blood>
source /mod/webif/lib/setup
require system.class rsv.class
if {[rsv count pending] <= 0} {
system restartpending 0
set class ""
}
}
puts "<div id=restart_block $class>"
puts {
<div style="width: 100%; height: 0.7em;
background: url(/img/stripes.gif) repeat-x;"></div>
<div>
Restart required.
}
if {[system busy]} {
puts "Cannot restart whilst box is busy."
puts "<div class=blood><i>System busy...</i></div>"
} else {
puts {
Restart via the remote control or
<small><button id=restart_humaxtv>Restart now</button></small>
<button class=red id=restart_humaxtv>Reboot now</button>
<script type=text/javascript src=/js/restart.js></script>
}
}
puts {
<small><button id=restart_cancel>Dismiss</button></small>
</font>
</div>
<div style="width: 100%; height: 0.7em;
background: url(/img/stripes.gif) repeat-x;"></div>
</center>
<script type=text/javascript>
$('#restart_humaxtv').button()
.click(function() {
if (confirm('Are you sure you wish to perform a restart now?'))
if (confirm('Really sure?\n\nThere is a small chance the ' +
' Humax may not restart\n' +
'without physical intervention.\n\n' +
'i.e. pressing the standby button or using the ' +
'remote control'))
window.location = '/cgi-bin/restart.jim';
});
$('#restart_cancel').button()
.click(function() {
$.get('/cgi-bin/restart.jim?act=cancel');
$('#restart_block').slideUp('slow');
});
</script>
}
} else {
system restartpending 0
}
</div>
}

View File

@ -32,9 +32,7 @@ if {[lindex $argv 0] eq "-d"} {
proc log {msg {level 1}} {
if {$level > $::loglevel} return
puts $::logfd "[\
clock format [clock seconds] -format "%d/%m/%Y %H:%M"\
] - $msg"
puts $::logfd "[system logtimestamp] - $msg"
flush $::logfd
}
@ -168,6 +166,7 @@ proc dedup {dir} {
log $line 2
}
}
incr ::recalc
}
proc do_shrink {ts} {
@ -321,7 +320,7 @@ proc do_decrypt {ts} {
if {[file size $file] != [file size "$tmp/$bfile"]} {
log " $file - File size mismatch." 0
file delete "$tmp/$bfile"
file tdelete "$tmp/$bfile"
endop
return
}
@ -330,7 +329,7 @@ proc do_decrypt {ts} {
# now being played even though it was free when decryption started.
if {[$ts inuse]} {
log " $file - In use."
file delete "$tmp/$bfile"
file tdelete "$tmp/$bfile"
endop
return
}
@ -345,7 +344,7 @@ proc do_decrypt {ts} {
if {$anencd != "0"} {
log " $file - File did not decrypt properly." 0
system notify "$file - auto-decrypt failed."
file delete "$tmp/$bfile"
file tdelete "$tmp/$bfile"
endop
return
}

68
webif/lib/bin/manage_logs Executable file
View File

@ -0,0 +1,68 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require settings.class
set s [settings]
set logsize [$s logsize]
set logkeep [$s logkeep]
puts "Rotating at $logsize, keeping $logkeep"
set logdir "/mod/tmp"
set baselogs {}
puts "\n-- Rotate\n"
foreach log [glob -nocomplain -tail -directory $logdir *.log] {
puts "\[$log\]"
set tstamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
# Check for old-style rotated log.
if {[string match {*_old.log} $log]} {
set new "[string range $log 0 end-8].$tstamp.log"
puts " -> $new"
file rename "$logdir/$log" "$logdir/$new"
continue
}
# Check for already rotated log.
if {[regexp -- {\.[0-9]{14}\.log$} $log]} {
puts " already rotated."
continue
}
ladd baselogs $log
if {[file size "$logdir/$log"] > $logsize} {
set new "[file rootname $log].$tstamp.log"
puts " -> $new"
file rename "$logdir/$log" "$logdir/$new"
}
}
puts "\n-- Purge\n"
proc logsort {a b} {
global logdir
return [expr [file mtime "$logdir/$a"] - [file mtime "$logdir/$b"]]
}
foreach log $baselogs {
# Count the number of rotated logs
set old [glob -nocomplain -tail -directory $logdir \
"[string range $log 0 end-4].*.log"]
set num [llength $old]
puts "\[$log\] - $num"
if {$num <= $logkeep} continue
lmap i [lrange [lsort -command logsort $old] 0 end-$logkeep] {
puts " Deleting old log $i"
file tdelete "$logdir/$i"
}
}

8
webif/lib/bin/reboot Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
/etc/init.d/S90settop shut
/mod/bin/sync
/sbin/reboot
exit 0

34
webif/lib/lib.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/sh
lbr_descr()
{
if [ -f /tmp/.lbr ]; then
case "`cat /tmp/.lbr`" in
1) echo "Front panel button" ;;
2) echo "Remote control handset" ;;
3) echo "Scheduled event" ;;
*) echo "Unknown `cat /tmp/.lbr`" ;;
esac
else
echo "Unknown"
fi
}
log_date()
{
date +'%d/%m/%Y %H:%M:%S'
}
log()
{
logf=$1; shift
echo "`log_date` - $*" >> /var/log/$logf.log
}
plog()
{
logf=$1; shift
echo "`log_date` - $*" >> /mod/tmp/$logf.log
}

View File

@ -33,6 +33,8 @@ class settings {
autolog 0
changechangenc 0
audiomp3 0
logsize 1048576
logkeep 2
}
settings method hostname {{name ""}} {
@ -327,3 +329,19 @@ settings method smartdata {} {
return $res
}
settings method logsize {{size -1}} {
set val [$self _nval_setting logsize $size]
if {$val == 0} {
return 1048576
}
return $val
}
settings method logkeep {{num -1}} {
set val [$self _nval_setting logkeep $num]
if {$val == 0} {
return 2
}
return $val
}

View File

@ -56,6 +56,22 @@ proc {system modbuild} {} {{modbuild ""}} {
return $modbuild
}
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)"
}
proc {system fhtcpversion} {} {{ver ""}} {
if {$ver ne ""} { return $ver }
set file "/etc/fhtcpversion"
@ -268,8 +284,7 @@ proc {system dirinuse} {dir} {
}
proc {system reboot} {} {
exec /etc/init.d/S90settop shut
exec /sbin/reboot
exec /mod/webif/lib/bin/reboot
}
proc {system restartpending} {{mode 1}} {
@ -351,14 +366,28 @@ 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"
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"
$logfd close
}
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
}
proc {system display} {hdr hd} {
if {[system model] eq "HDR"} {
exec /sbin/display $hdr