check in initial web interface
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif@161 2a923420-c742-0410-a762-8d5b09965624
35
var/mongoose/cgi-bin/epg_dump.jim
Executable file
@ -0,0 +1,35 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
package require cgi
|
||||
source /mod/var/mongoose/lib/epg.class
|
||||
|
||||
puts "Content-Type: text/html"
|
||||
puts ""
|
||||
|
||||
source /mod/var/mongoose/html/lib/header.jim
|
||||
|
||||
cgi_input
|
||||
#cgi_dump
|
||||
|
||||
set service 0
|
||||
set service 4351
|
||||
catch { set service [dict get $_cgi service] }
|
||||
set event 0
|
||||
catch { set event [dict get $_cgi event] }
|
||||
set raw 0
|
||||
catch { set raw [dict get $_cgi raw] }
|
||||
|
||||
puts "<pre>"
|
||||
if { $raw == 0 } {
|
||||
puts [epg exec dump -raw 1 -service $service -event $event]
|
||||
puts "<a href=$env(REQUEST_URI)?$env(QUERY_STRING)&raw=1>
|
||||
Click here for extended dump</a>"
|
||||
} else {
|
||||
puts [epg exec dumpraw -raw 1 -service $service -event $event]
|
||||
}
|
||||
|
||||
puts "</pre>"
|
||||
|
||||
epg cleanup
|
||||
source /mod/var/mongoose/html/lib/footer.jim
|
||||
|
144
var/mongoose/cgi-bin/epg_search.jim
Executable file
@ -0,0 +1,144 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
package require cgi
|
||||
source /mod/var/mongoose/lib/epg.class
|
||||
source /mod/var/mongoose/lib/altrow
|
||||
|
||||
puts "Content-Type: text/html"
|
||||
puts ""
|
||||
|
||||
source /mod/var/mongoose/html/lib/header.jim
|
||||
|
||||
puts "<script type=text/javascript src=/js/highlight.js></script>"
|
||||
|
||||
cgi_input
|
||||
#cgi_dump
|
||||
#set _cgi [dict create term "doctor who"]
|
||||
#set env(REQUEST_URI) "test"
|
||||
|
||||
set term ""
|
||||
catch { set term [dict get $_cgi term] }
|
||||
set cmd "search"
|
||||
if {[dict exists $_cgi full]} { set cmd "searchall" }
|
||||
set ct 0
|
||||
catch { set ct [dict get $_cgi ct] }
|
||||
|
||||
puts "
|
||||
<form method=get action=/cgi-bin/epg_search.jim>
|
||||
Search EPG: <input name=term size=20 maxlength=255 value=\"$term\">
|
||||
<input type=checkbox name=full"
|
||||
if {[dict exists $_cgi full]} { puts " checked" }
|
||||
puts ">Search descriptions as well as titles.
|
||||
<input type=submit value=Search>
|
||||
"
|
||||
|
||||
set db [sqlite3.open /var/lib/humaxtv/setup.db]
|
||||
set res [$db query {
|
||||
select itemBlob from TBL_USERCONFIG
|
||||
where itemName like 'EPG\_KEYWORD\_%%' ESCAPE '\'
|
||||
}]
|
||||
|
||||
proc cts {type img text} {
|
||||
puts "<a href=$::env(REQUEST_URI)?ct=$type>
|
||||
<img height=18 border=0 src=/images/173_3_00_G3_$img.png> $text</a>";
|
||||
}
|
||||
|
||||
puts {
|
||||
<br>
|
||||
<div style="float: left; clear: left; width: 15em">
|
||||
Content Type Searches:
|
||||
</div>
|
||||
<div style="float: left">
|
||||
}
|
||||
cts 1 "Movie" "Film/Drama"
|
||||
cts 2 "News" "News/Current affairs"
|
||||
cts 3 "Show" "Show/Game show"
|
||||
cts 4 "Sports" "Sport"
|
||||
cts 5 "Children" "Children"
|
||||
cts 10 "Leisure" "Leisure"
|
||||
puts {
|
||||
</div>
|
||||
<div style="float: left; margin-left: 15em">
|
||||
}
|
||||
cts 6 "Music" "Music/Ballet/Dance"
|
||||
cts 7 "Art" "Arts/Culture"
|
||||
cts 8 "Society" "Social/Political/Economic"
|
||||
cts 9 "Education" "Education/Science/Factual"
|
||||
puts { </div> }
|
||||
|
||||
if {[llength $res] > 0} {
|
||||
puts {
|
||||
<div style="float: left; clear: left; width: 15em">
|
||||
Keyword Searches:
|
||||
</div>
|
||||
<div style="float: left">
|
||||
}
|
||||
set done 0
|
||||
foreach keyword $res {
|
||||
if {$done == 1} { puts " | " } else { incr done }
|
||||
set kw [string range [lindex $keyword 1] 1 end]
|
||||
puts "<a href=$env(REQUEST_URI)?term=[cgi_quote_url $kw]>$kw
|
||||
</a>"
|
||||
}
|
||||
puts "</div>"
|
||||
}
|
||||
|
||||
$db close
|
||||
|
||||
puts "</form>"
|
||||
|
||||
if {$ct > 0 } {
|
||||
set records [epg fetch dump -type $ct]
|
||||
} elseif {$term ne ""} {
|
||||
set records [epg fetch $cmd -extra $term]
|
||||
}
|
||||
|
||||
puts {
|
||||
<table class=borders id=results style="clear: both;margin: 0.5em 0 0 0">
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th colspan=2>Channel</th>
|
||||
<th>Programme</th>
|
||||
<th>Synopsis</th>
|
||||
</tr>
|
||||
}
|
||||
|
||||
proc rsort {v1 v2} {
|
||||
set v1s [$v1 get start]
|
||||
set v2s [$v2 get start]
|
||||
|
||||
if {$v1s == $v2s} { return 0 }
|
||||
if {$v1s > $v2s } { return 1 }
|
||||
return -1
|
||||
}
|
||||
|
||||
|
||||
set i 0
|
||||
foreach record [lsort -command rsort $records] {
|
||||
altrow
|
||||
puts "<td nowrap>
|
||||
[clock format [$record get start] -format "%a %d %b %Y"]<br>
|
||||
[clock format [$record get start] -format "%H:%M %Z"]</td>"
|
||||
puts "<td>[$record get channel_num]</td>"
|
||||
puts "<td nowrap>
|
||||
<a href=/cgi-bin/epg_service.jim?service=[$record get service_id]>
|
||||
[$record get channel_name]
|
||||
</a></td>"
|
||||
puts [$record cell]
|
||||
puts "<td>[$record get text]</td><td>[$record get warning]</td>"
|
||||
puts "</tr>"
|
||||
flush stdout
|
||||
}
|
||||
puts "</table>"
|
||||
|
||||
if {$term != ""} {
|
||||
puts "
|
||||
<script type=text/javascript>
|
||||
highlight(document.getElementById(\"results\"), \"$term\");
|
||||
</script>
|
||||
"
|
||||
}
|
||||
|
||||
epg cleanup
|
||||
source /mod/var/mongoose/html/lib/footer.jim
|
||||
|
57
var/mongoose/cgi-bin/epg_service.jim
Executable file
@ -0,0 +1,57 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
package require cgi
|
||||
source /mod/var/mongoose/lib/epg.class
|
||||
source /mod/var/mongoose/lib/altrow
|
||||
|
||||
puts "Content-Type: text/html"
|
||||
puts ""
|
||||
|
||||
source /mod/var/mongoose/html/lib/header.jim
|
||||
|
||||
cgi_input
|
||||
#cgi_dump
|
||||
|
||||
set service 0
|
||||
set service 4351
|
||||
catch { set service [dict get $_cgi service] }
|
||||
|
||||
set records [epg fetch dump -service $service]
|
||||
|
||||
set channel_num [[lindex $records 0] get channel_num]
|
||||
set channel_name [[lindex $records 0] get channel_name]
|
||||
|
||||
puts "<h3>Channel: $channel_num - $channel_name</h3>"
|
||||
|
||||
puts {
|
||||
<table class=borders>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Date</th>
|
||||
<th>Time</th>
|
||||
<th>Programme</th>
|
||||
<th>Synopsis</th>
|
||||
</tr>
|
||||
}
|
||||
|
||||
set i 0
|
||||
foreach record $records {
|
||||
altrow
|
||||
if {[$record showing]} {
|
||||
puts "<td><img src=/images/111_1_00_Cursor_2R_Arrow.png></td>"
|
||||
} else { puts "<td></td>" }
|
||||
puts "<td nowrap>
|
||||
[clock format [$record get start] -format "%a %d %b %Y"]</td>"
|
||||
puts "<td nowrap>
|
||||
[clock format [$record get start] -format "%H:%M"]</td>"
|
||||
puts [$record cell]
|
||||
puts "<td>[$record get text]</td>"
|
||||
puts "<td>[$record get warning]</td>"
|
||||
puts "</tr>"
|
||||
flush stdout
|
||||
}
|
||||
puts "</table>"
|
||||
|
||||
epg cleanup
|
||||
source /mod/var/mongoose/html/lib/footer.jim
|
||||
|
15
var/mongoose/cgi-bin/service.jim
Executable file
@ -0,0 +1,15 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
package require cgi
|
||||
|
||||
puts "Content-Type: text/html"
|
||||
puts ""
|
||||
|
||||
cgi_input
|
||||
#cgi_dump
|
||||
|
||||
catch { set service [dict get $_cgi service] }
|
||||
catch { set action [dict get $_cgi action] }
|
||||
|
||||
catch { puts [exec /mod/bin/service $action $service] }
|
||||
|
47
var/mongoose/cgi-bin/status.jim
Executable file
@ -0,0 +1,47 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
set pid [exec pgrep humaxtv]
|
||||
|
||||
if {[catch {set data [exec lsof -p $pid | grep Video | fgrep .ts]} ]} {
|
||||
exit
|
||||
}
|
||||
|
||||
set lines [split $data "\n"]
|
||||
foreach line $lines {
|
||||
regsub -all -- {[[:space:]]+} $line " " line
|
||||
set fields [split $line " "]
|
||||
set name [lindex [split $line "/"] end]
|
||||
set size($name) [lindex $fields 6]
|
||||
set seen($name) 0
|
||||
}
|
||||
|
||||
sleep 2
|
||||
|
||||
set data [exec lsof -p $pid | grep Video | fgrep .ts]
|
||||
regsub -all -- {[[:space:]]+} $line " " line
|
||||
set lines [split $data "\n"]
|
||||
foreach line $lines {
|
||||
regsub -all -- {[[:space:]]+} $line " " line
|
||||
set fields [split $line " "]
|
||||
set name [lindex [split $line "/"] end]
|
||||
set size2 [lindex $fields 6]
|
||||
|
||||
if { $size2 > $size($name) && $seen($name) < 1 } {
|
||||
set mode "Recording"
|
||||
set icon "745_1_11_Video_1REC.png"
|
||||
} else {
|
||||
set mode "Watching"
|
||||
set icon "745_1_10_Video_2Live.png"
|
||||
}
|
||||
|
||||
incr seen($name)
|
||||
|
||||
lappend output "<img src=/images/$icon>$mode $name"
|
||||
}
|
||||
|
||||
if {[llength $output]} {
|
||||
puts "Content-Type: text/html"
|
||||
puts ""
|
||||
puts [join $output "<br>\n"]
|
||||
}
|
||||
|
201
var/mongoose/html/css/style.css
Normal file
@ -0,0 +1,201 @@
|
||||
html body
|
||||
{
|
||||
line-height: 1.55em;
|
||||
font-family: "Lucida Grande", verdana, lucida, helvetica, sans-serif;
|
||||
background-color: #f8f8f8;
|
||||
margin: 1em;
|
||||
padding: 0;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
html>body
|
||||
{
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
div.container
|
||||
{
|
||||
position: relative;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
height: 116px;
|
||||
}
|
||||
|
||||
div.container .left
|
||||
{
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
width: 30px;
|
||||
height: 116px;
|
||||
}
|
||||
|
||||
div.container .right
|
||||
{
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
width: 30px;
|
||||
height: 116px;
|
||||
}
|
||||
|
||||
div.container .middle
|
||||
{
|
||||
background-image: url('/images/154_1_00_WIN_MD116_2C.png');
|
||||
background-repeat: repeat-x;
|
||||
height: 116px;
|
||||
}
|
||||
|
||||
div.footer
|
||||
{
|
||||
clear: both;
|
||||
padding-top: 2em;
|
||||
}
|
||||
|
||||
table
|
||||
{
|
||||
empty-cells: show;
|
||||
}
|
||||
|
||||
table.borders, table.borders td, table.borders th
|
||||
{
|
||||
border: 1px solid #669933;
|
||||
empty-cells: show;
|
||||
}
|
||||
|
||||
table tr.odd
|
||||
{
|
||||
background: #ccff99;
|
||||
color: black;
|
||||
}
|
||||
|
||||
table tr.even
|
||||
{
|
||||
background: #ffffcc;
|
||||
color: black;
|
||||
}
|
||||
|
||||
table td,table th
|
||||
{
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
table th
|
||||
{
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
pre
|
||||
{
|
||||
font-family: Consolas, 'Courier New', Courier, monospace;
|
||||
color: black;
|
||||
background: #f9d9b0 url('/img/prebg.png') repeat-x top;
|
||||
line-height: 1.24;
|
||||
padding: 3px 8px;
|
||||
margin: 0 5em 1em 5em;
|
||||
border-color: #f9d9b0;
|
||||
border-bottom: 1px solid #f9bc6d;
|
||||
border-top-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
-khtml-border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-khtml-border-top-right-radius: 4px;
|
||||
|
||||
white-space: pre-wrap;
|
||||
white-space: -moz-pre-wrap !important;
|
||||
white-space: -pre-wrap;
|
||||
white-space: -o-pre-wrap;
|
||||
white-space: break-word;
|
||||
}
|
||||
|
||||
.shadowbox
|
||||
{
|
||||
background: #ccc;
|
||||
position: relative;
|
||||
width: 60%;
|
||||
top: 2px;
|
||||
left: 2px;
|
||||
}
|
||||
|
||||
.shadowbox div
|
||||
{
|
||||
background: white;
|
||||
color: #005000;
|
||||
border: 1px solid #7a4707;
|
||||
padding: 10px;
|
||||
position: relative;
|
||||
top: -2px;
|
||||
left: -2px;
|
||||
}
|
||||
|
||||
:link:focus,
|
||||
:visited:focus,
|
||||
:link,
|
||||
:visited,
|
||||
:link:active,
|
||||
:visited:active
|
||||
{
|
||||
text-decoration: none;
|
||||
color: #1e5bbd;
|
||||
background-color: transparent;
|
||||
}
|
||||
/*
|
||||
:link:hover,
|
||||
:visited:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
background-color: #b4d5ff;
|
||||
color: #1559B3;
|
||||
}
|
||||
*/
|
||||
|
||||
.footnote
|
||||
{
|
||||
color: #ff4000;
|
||||
background: transparent;
|
||||
font-size: 70%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.blueshade
|
||||
{
|
||||
background: #b9daff;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.yellowshade
|
||||
{
|
||||
background: #f6ff5b;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.pinkshade
|
||||
{
|
||||
background: #ffccff;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.greenshade
|
||||
{
|
||||
background: #e4faa8;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.orangeshade
|
||||
{
|
||||
background: #ffeeaa;
|
||||
color: black;
|
||||
}
|
||||
|
||||
img.progress
|
||||
{
|
||||
background: transparent url(/img/percentback.png) top left no-repeat;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background-position: 1px 0;
|
||||
}
|
||||
|
4
var/mongoose/html/db.shtml
Normal file
@ -0,0 +1,4 @@
|
||||
<!--#include virtual="/lib/header.shtml" -->
|
||||
<!--#exec "/mod/var/mongoose/include/db.jim" -->
|
||||
<!--#include virtual="/lib/footer.shtml" -->
|
||||
|
9
var/mongoose/html/epg.shtml
Normal file
@ -0,0 +1,9 @@
|
||||
<!--#include virtual="/lib/header.shtml" -->
|
||||
<form method=get action=/cgi-bin/epg_search.jim>
|
||||
Search EPG: <input name=term size=20 maxlength=255>
|
||||
<input type=checkbox name=full>Search descriptions as well as titles.
|
||||
<input type=submit value=Search>
|
||||
</form>
|
||||
<!--#exec "/mod/var/mongoose/include/epg.jim" -->
|
||||
<!--#include virtual="/lib/footer.shtml" -->
|
||||
|
1040
var/mongoose/html/img.html
Normal file
BIN
var/mongoose/html/img/favicon.ico
Normal file
After Width: | Height: | Size: 894 B |
BIN
var/mongoose/html/img/off.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
var/mongoose/html/img/on.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
var/mongoose/html/img/packages.jpg
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
var/mongoose/html/img/percentback.png
Normal file
After Width: | Height: | Size: 540 B |
BIN
var/mongoose/html/img/percentimage.png
Normal file
After Width: | Height: | Size: 1023 B |
BIN
var/mongoose/html/img/prebg.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
var/mongoose/html/img/spanner.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
108
var/mongoose/html/index.shtml
Normal file
@ -0,0 +1,108 @@
|
||||
<!--#include virtual="/lib/header.shtml" -->
|
||||
|
||||
<div id=status class=shadowbox
|
||||
style="width: 60%; display: none; margin: 1 0 1em 0">
|
||||
<div>
|
||||
<span id=status_txt>
|
||||
Status...
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type=text/javascript src=/js/ajax.js></script>
|
||||
|
||||
<script type=text/javascript>
|
||||
function updateResults()
|
||||
{
|
||||
var r = document.getElementById('status');
|
||||
if (r && request.readyState == 4 && request.status == 200)
|
||||
{
|
||||
r.style.display = 'block';
|
||||
var t = document.getElementById('status_txt');
|
||||
t.innerHTML = request.responseText;
|
||||
}
|
||||
}
|
||||
|
||||
function go()
|
||||
{
|
||||
var url = "/cgi-bin/status.jim";
|
||||
|
||||
request.open("GET", url, true);
|
||||
request.onreadystatechange = updateResults;
|
||||
request.send(null);
|
||||
}
|
||||
|
||||
go();
|
||||
|
||||
</script>
|
||||
|
||||
<div style="float: left">
|
||||
<center>
|
||||
<a href=/media>
|
||||
<img src=/images/323_1_10_Menu_Video.png border=0 width=217 height=228>
|
||||
</a>
|
||||
<br>
|
||||
<a href=/media>
|
||||
<b>Browse Media Files</b>
|
||||
</a>
|
||||
<br>
|
||||
<font class=footnote>
|
||||
(NOTE: The files are encrypted if they were<br>
|
||||
recorded off air.)
|
||||
</font>
|
||||
</center>
|
||||
|
||||
</div>
|
||||
<div style="float: left">
|
||||
<center>
|
||||
<a href=/sched.shtml>
|
||||
<img src=/images/321_1_00_Menu_CHList.png border=0 width=217 height=228>
|
||||
</a>
|
||||
<br>
|
||||
<a href=/sched.shtml>
|
||||
<b>Scheduled Recordings</b>
|
||||
</a>
|
||||
<br>
|
||||
</center>
|
||||
</div>
|
||||
<div style="float: left">
|
||||
<center>
|
||||
<a href=/epg.shtml>
|
||||
<img src=/images/328_1_26_Menu_TV_Guide.png border=0 width=217 height=228>
|
||||
</a>
|
||||
<br>
|
||||
<a href=/epg.shtml>
|
||||
<b>EPG</b>
|
||||
</a>
|
||||
<br>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div style="float: left; clear: left">
|
||||
<center>
|
||||
<a href=/services.shtml>
|
||||
<img src=/img/spanner.jpg border=0 width=217 height=228>
|
||||
</a>
|
||||
<br>
|
||||
<a href=/services.shtml>
|
||||
<b>Service Management</b>
|
||||
</a>
|
||||
<br>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div style="float: left">
|
||||
<center>
|
||||
<a href=/packages.shtml>
|
||||
<img src=/img/packages.jpg border=0 width=217 height=228>
|
||||
</a>
|
||||
<br>
|
||||
<a href=/packages.shtml>
|
||||
<b>Package Management</b>
|
||||
</a>
|
||||
<br>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<!--#include virtual="/lib/footer.shtml" -->
|
||||
|
24
var/mongoose/html/js/ajax.js
Normal file
@ -0,0 +1,24 @@
|
||||
var request = false;
|
||||
|
||||
/*@cc_on @*/
|
||||
/*@if (@_jscript_version >= 5)
|
||||
try
|
||||
{
|
||||
request = new ActiveXObject("Msxml2.XMLHTTP");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
try
|
||||
{
|
||||
request = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
case (e2)
|
||||
{
|
||||
request = false;
|
||||
}
|
||||
}
|
||||
@end @*/
|
||||
|
||||
if (!request && typeof XMLHttpRequest != 'undefined')
|
||||
request = new XMLHttpRequest();
|
||||
|
44
var/mongoose/html/js/highlight.js
Normal file
@ -0,0 +1,44 @@
|
||||
|
||||
function highlight(obj, searchTerm)
|
||||
{
|
||||
var bodyText = obj.innerHTML;
|
||||
|
||||
stag = "<span class=yellowshade>";
|
||||
etag = "</span>";
|
||||
|
||||
var newText = "";
|
||||
var i = -1;
|
||||
var lcSearchTerm = searchTerm.toLowerCase();
|
||||
var lcBodyText = bodyText.toLowerCase();
|
||||
|
||||
while (bodyText.length > 0)
|
||||
{
|
||||
i = lcBodyText.indexOf(lcSearchTerm, i + 1);
|
||||
if (i < 0)
|
||||
{
|
||||
newText += bodyText;
|
||||
bodyText = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bodyText.lastIndexOf(">", i) >=
|
||||
bodyText.lastIndexOf("<", i))
|
||||
{
|
||||
if (lcBodyText.lastIndexOf("/script>", i) >=
|
||||
lcBodyText.lastIndexOf("<script", i))
|
||||
{
|
||||
newText += bodyText.substring(0, i) +
|
||||
stag +
|
||||
bodyText.substr(i,
|
||||
searchTerm.length) + etag;
|
||||
bodyText = bodyText.substr(i +
|
||||
searchTerm.length);
|
||||
lcBodyText = bodyText.toLowerCase();
|
||||
i = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
obj.innerHTML = newText;
|
||||
}
|
||||
|
24
var/mongoose/html/lib/footer.jim
Normal file
@ -0,0 +1,24 @@
|
||||
set rendertime [expr [expr [clock milliseconds] - $renderstart] / 1000.0]
|
||||
|
||||
puts "<font class=footnote>Rendered in: $rendertime seconds</font>"
|
||||
|
||||
puts {
|
||||
<!-- Start of footer -->
|
||||
<div class=footer>
|
||||
<ul>
|
||||
<li>
|
||||
}
|
||||
source /mod/var/mongoose/include/mediatomb.jim
|
||||
puts {
|
||||
MediaTomb Web Interface</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href=/db.shtml> SQLite3 Database Dump </a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
}
|
||||
|
15
var/mongoose/html/lib/footer.shtml
Normal file
@ -0,0 +1,15 @@
|
||||
<!-- Start of footer -->
|
||||
<div class=footer>
|
||||
<ul>
|
||||
<li><!--#exec "/mod/var/mongoose/include/mediatomb.jim" -->
|
||||
MediaTomb Web Interface</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href=/db.shtml> SQLite3 Database Dump </a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
20
var/mongoose/html/lib/header.jim
Normal file
@ -0,0 +1,20 @@
|
||||
puts {
|
||||
<html>
|
||||
<head>
|
||||
<title>Humax HD[R] Fox T2</title>
|
||||
<link rel="shortcut icon" href=/img/favicon.ico>
|
||||
<link href=/css/style.css rel=stylesheet type=text/css>
|
||||
</head>
|
||||
<body>
|
||||
}
|
||||
|
||||
source /mod/var/mongoose/html/lib/topbar.jim
|
||||
|
||||
puts {
|
||||
<div style="clear: both">
|
||||
|
||||
<!-- end of header -->
|
||||
}
|
||||
|
||||
set renderstart [clock milliseconds]
|
||||
|
13
var/mongoose/html/lib/header.shtml
Normal file
@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Humax HD[R] Fox T2</title>
|
||||
<link rel="shortcut icon" href=/img/favicon.ico>
|
||||
<link href=/css/style.css rel=stylesheet type=text/css>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!--#include virtual="/lib/topbar.shtml" -->
|
||||
|
||||
<div style="clear: both">
|
||||
|
||||
<!-- end of header -->
|
22
var/mongoose/html/lib/topbar.jim
Normal file
@ -0,0 +1,22 @@
|
||||
puts {
|
||||
<!-- start of topbar -->
|
||||
|
||||
<div class=container onclick="location.href='/'; return false;">
|
||||
<div class=left><img src=/images/154_1_00_WIN_MD116_1L.png></div>
|
||||
<div class=middle>
|
||||
<img border=0 src=/images/516_1_26_Freeview_Logo.png>
|
||||
<span style="font-size: 150%; padding: 0 0 0 2em;">
|
||||
Humax HD[R] Fox T2
|
||||
</span>
|
||||
<!-- Start include diskspace -->
|
||||
}
|
||||
source /mod/var/mongoose/include/diskspace.jim
|
||||
puts {
|
||||
<!-- End include diskspace -->
|
||||
</div>
|
||||
<div class=right><img src=/images/154_1_00_WIN_MD116_3R.png></div>
|
||||
</div>
|
||||
|
||||
<!-- end of topbar -->
|
||||
}
|
||||
|
17
var/mongoose/html/lib/topbar.shtml
Normal file
@ -0,0 +1,17 @@
|
||||
<!-- start of topbar -->
|
||||
|
||||
<div class=container onclick="location.href='/'; return false;">
|
||||
<div class=left><img src=/images/154_1_00_WIN_MD116_1L.png></div>
|
||||
<div class=middle>
|
||||
<img border=0 src=/images/516_1_26_Freeview_Logo.png>
|
||||
<span style="font-size: 150%; padding: 0 0 0 2em;">
|
||||
Humax HD[R] Fox T2
|
||||
</span>
|
||||
<!-- Start include diskspace -->
|
||||
<!--#exec "/mod/var/mongoose/include/diskspace.jim" -->
|
||||
<!-- End include diskspace -->
|
||||
</div>
|
||||
<div class=right><img src=/images/154_1_00_WIN_MD116_3R.png></div>
|
||||
</div>
|
||||
|
||||
<!-- end of topbar -->
|
14
var/mongoose/html/packages.shtml
Normal file
@ -0,0 +1,14 @@
|
||||
<!--#include virtual="/lib/header.shtml" -->
|
||||
|
||||
<h1>Package Management</h1>
|
||||
<div id=results class=shadowbox style="width: 90%; display: none; margin: 1 0 1em 0">
|
||||
<div>
|
||||
<pre id=result_txt>
|
||||
Results...
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--#exec "/mod/var/mongoose/include/packages.jim" -->
|
||||
|
||||
<!--#include virtual="/lib/footer.shtml" -->
|
4
var/mongoose/html/sched.shtml
Normal file
@ -0,0 +1,4 @@
|
||||
<!--#include virtual="/lib/header.shtml" -->
|
||||
<!--#exec "/mod/var/mongoose/include/sched.jim" -->
|
||||
<!--#include virtual="/lib/footer.shtml" -->
|
||||
|
58
var/mongoose/html/services.shtml
Normal file
@ -0,0 +1,58 @@
|
||||
<!--#include virtual="/lib/header.shtml" -->
|
||||
|
||||
<script type=text/javascript src=/js/ajax.js></script>
|
||||
|
||||
<script type=text/javascript>
|
||||
function updateResults()
|
||||
{
|
||||
var r = document.getElementById('results');
|
||||
if (r && request.readyState == 4 && request.status == 200)
|
||||
{
|
||||
r.style.display = 'block';
|
||||
var t = document.getElementById('result_txt');
|
||||
t.innerHTML = request.responseText;
|
||||
}
|
||||
}
|
||||
|
||||
function go(service, action)
|
||||
{
|
||||
if (service == null || service == "" ||
|
||||
action == null || action == "")
|
||||
return;
|
||||
|
||||
var url = "/cgi-bin/service.jim?service=" + escape(service) +
|
||||
"&action=" + escape(action);
|
||||
|
||||
request.open("GET", url, true);
|
||||
request.onreadystatechange = updateResults;
|
||||
request.send(null);
|
||||
}
|
||||
|
||||
function toggle(obj)
|
||||
{
|
||||
if (obj.src.search("on") > -1)
|
||||
obj.src = '/img/off.png';
|
||||
else
|
||||
obj.src = '/img/on.png';
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<h1>Service Management</h1>
|
||||
<div id=results class=shadowbox style="width: 90%; display: none; margin: 1 0 1em 0">
|
||||
<div>
|
||||
<pre id=result_txt>
|
||||
Results...
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class=borders cellpadding=5>
|
||||
<tr class=greenshade>
|
||||
<th>Service</th>
|
||||
<th>Auto Startup</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
<!--#exec "/mod/var/mongoose/include/services.jim" -->
|
||||
</table>
|
||||
<!--#include virtual="/lib/footer.shtml" -->
|
40
var/mongoose/include/db.jim
Executable file
@ -0,0 +1,40 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
package require sqlite3
|
||||
|
||||
proc db_info {db_file} {
|
||||
set db [sqlite3.open $db_file]
|
||||
set tables [$db query {SELECT name FROM sqlite_master WHERE type='table' ORDER BY name}]
|
||||
|
||||
puts "<h1>$db_file</h1>"
|
||||
|
||||
foreach table $tables {
|
||||
set table_name [lindex $table 1]
|
||||
set columns [$db query "pragma table_info($table_name)"]
|
||||
set datas [$db query "SELECT * FROM $table_name"]
|
||||
|
||||
puts "<h2>$table_name</h2>"
|
||||
puts "<table>"
|
||||
puts " <tr>"
|
||||
foreach column $columns {
|
||||
puts " <td>[lindex $column 3]</td>"
|
||||
}
|
||||
puts " </tr>"
|
||||
foreach data $datas {
|
||||
puts " <tr>"
|
||||
|
||||
for {set i 1} {$i < [llength $data]} {incr i 2} {
|
||||
puts " <td>[lindex $data $i]</td>"
|
||||
}
|
||||
puts " </tr>"
|
||||
}
|
||||
puts "</table>"
|
||||
}
|
||||
|
||||
$db close
|
||||
}
|
||||
|
||||
puts {<style type="text/css">table, td, th {border-collapse:collapse; border:1px solid black;}</style>}
|
||||
db_info /var/lib/humaxtv/rsv.db
|
||||
db_info /var/lib/humaxtv/setup.db
|
||||
db_info /var/lib/humaxtv/channel.db
|
24
var/mongoose/include/diskspace.jim
Executable file
@ -0,0 +1,24 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
foreach df [split [exec df -h] "\n\r"] {
|
||||
if [string match *sda2* $df] {
|
||||
regsub -all -- {[[:space:]]+} $df " " df
|
||||
set fields [split $df]
|
||||
set size [lindex $fields 1]
|
||||
set used [lindex $fields 2]
|
||||
set perc [string trimright [lindex $fields 4] "%"]
|
||||
}
|
||||
}
|
||||
|
||||
set file [format "%02d" [expr {$perc * 25 / 100 + 1}]]
|
||||
|
||||
puts "<div style=\"float: right; background:url('/images/345_1_27_ST_USB_BG.png')\">"
|
||||
puts "<img src=/images/345_2_14_ST_HDD_$file.png>"
|
||||
puts "</div>"
|
||||
puts "<span style=\"float: right\">"
|
||||
puts "<br>"
|
||||
puts "Total space: $size<br>"
|
||||
puts "Used: $used ($perc%)"
|
||||
puts "</span>"
|
||||
|
||||
|
49
var/mongoose/include/epg.jim
Executable file
@ -0,0 +1,49 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
source /mod/var/mongoose/lib/epg.class
|
||||
source /mod/var/mongoose/lib/altrow
|
||||
|
||||
set start [clock milliseconds]
|
||||
set records [epg fetch dump -time [clock seconds]]
|
||||
set got [clock milliseconds]
|
||||
|
||||
puts {
|
||||
<table class=borders>
|
||||
<tr>
|
||||
<th colspan=2>Channel</th>
|
||||
<th>On Now</th>
|
||||
<th>On Next</th>
|
||||
</tr>
|
||||
}
|
||||
|
||||
proc rsort {v1 v2} {
|
||||
set v1s [$v1 get channel_num]
|
||||
set v2s [$v2 get channel_num]
|
||||
|
||||
if {$v1s == $v2s} { return 0 }
|
||||
if {$v1s > $v2s } { return 1 }
|
||||
return -1
|
||||
}
|
||||
|
||||
set i 0
|
||||
foreach record [lsort -command rsort $records] {
|
||||
altrow
|
||||
puts "<td>[$record get channel_num]</td>"
|
||||
puts "<td>
|
||||
<a href=/cgi-bin/epg_service.jim?service=[$record get service_id]>
|
||||
[$record get channel_name]
|
||||
</a></td>"
|
||||
puts [$record cell]
|
||||
puts [[$record next] cell]
|
||||
puts "</tr>"
|
||||
}
|
||||
puts "</table>"
|
||||
|
||||
set end [clock milliseconds]
|
||||
puts "<font class=footnote>
|
||||
Retrieved now in: [expr [expr $got - $start] / 1000.0] seconds.<br>
|
||||
All rendered in: [expr [expr $end - $start] / 1000.0] seconds.
|
||||
</font>"
|
||||
|
||||
epg cleanup
|
||||
|
12
var/mongoose/include/mediatomb.jim
Executable file
@ -0,0 +1,12 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
if { [catch {set fd [open "/mod/mediatomb/config/mediatomb.html" r]} fid] } {
|
||||
exit 0
|
||||
}
|
||||
set data [read $fd]
|
||||
close $fd
|
||||
regexp {URL=([^"]*)} $data match
|
||||
set url [string range $match 4 [string length $match]]
|
||||
|
||||
puts "<a href=$url>";
|
||||
|
54
var/mongoose/include/packages.jim
Executable file
@ -0,0 +1,54 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
# Build a list of available packages
|
||||
|
||||
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)<br>"
|
||||
}
|
||||
|
||||
# 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<br>"
|
||||
}
|
||||
|
||||
puts "<table class=borders>"
|
||||
puts "<tr>"
|
||||
puts "<th>Installed</th>"
|
||||
puts "<th>Name</th>"
|
||||
puts "<th>Version</th>"
|
||||
puts "<th>Description</th>"
|
||||
puts "</tr>"
|
||||
|
||||
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 "<tr>"
|
||||
puts "<td>"
|
||||
if {[lsearch $inst_pkgs $name] > -1} {
|
||||
puts "<img src=/img/on.png>"
|
||||
} else {
|
||||
puts "<img src=/img/off.png>"
|
||||
}
|
||||
|
||||
puts "</td>"
|
||||
puts "<td>$name</td>"
|
||||
puts "<td>$ver</td>"
|
||||
puts "<td>$descr</td>"
|
||||
puts "</tr>"
|
||||
}
|
||||
|
||||
puts "</table>"
|
||||
|
86
var/mongoose/include/sched.jim
Executable file
@ -0,0 +1,86 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
package require sqlite3
|
||||
|
||||
source /mod/var/mongoose/lib/altrow
|
||||
|
||||
set db [sqlite3.open /var/lib/humaxtv/rsv.db]
|
||||
$db query {attach database '/var/lib/humaxtv/channel.db' as channel}
|
||||
|
||||
set res [$db query {
|
||||
select *, channel.TBL_SVC.szSvcName, channel.TBL_SVC.usLcn,
|
||||
case when ersvtype > 3 then 1 else 0 end as sort
|
||||
from tbl_reservation
|
||||
left join channel.TBL_SVC
|
||||
on main.TBL_RESERVATION.hSvc = channel.TBL_SVC.hSvc
|
||||
order by sort, nsttime
|
||||
}]
|
||||
|
||||
puts "<table class=borders>"
|
||||
puts "<tr>"
|
||||
#puts "<th>Slot</th>"
|
||||
puts "<th colspan=2>Programme</th>"
|
||||
puts "<th>Duration</th>"
|
||||
puts "<th colspan=2>Channel</th>"
|
||||
puts "<th>Date/Time</th>"
|
||||
puts "<th>Mode</th>"
|
||||
puts "<th>Series ID</th>"
|
||||
puts "</tr>"
|
||||
set i 0
|
||||
foreach r $res {
|
||||
set name [string range $r(szevtname) 1 end]
|
||||
if {[string first "i7" $name] == 0} {
|
||||
set name [string range $name 2 end]
|
||||
set b "*"
|
||||
} else {
|
||||
set b ""
|
||||
}
|
||||
|
||||
altrow
|
||||
|
||||
set rsvicon ""
|
||||
set alta ""
|
||||
switch $r(ersvtype) {
|
||||
1 { set rsvicon "175_1_00_Reservation_Watch.png" }
|
||||
2 { set rsvicon "175_1_00_Reservation_Watch.png" }
|
||||
3 { set rsvicon "175_1_11_Reservation_Record.png" }
|
||||
5 { set rsvicon "745_1_10_Video_2Live.png"; set alta "Wake-up" }
|
||||
6 { set rsvicon "745_1_11_Video_1REC.png"; set alta "Sleep" }
|
||||
7 { set rsvicon "345_6_08_ST_Ad_Hoc.png"
|
||||
set alta "Software Update" }
|
||||
default { set alta "Unknown type $r(ersvtype)" }
|
||||
}
|
||||
if {$name == ""} { set name "-- $alta --" }
|
||||
|
||||
if {$r(ucRecKind) == 4} {
|
||||
set RKIcon "175_1_11_Series_Record.png"
|
||||
} else {
|
||||
switch $r(erepeat) {
|
||||
1 {set RKIcon "521_1_00_RP_Daily_C.png"}
|
||||
2 {set RKIcon "521_1_00_RP_Weekly_C.png"}
|
||||
3 {set RKIcon "521_1_00_RP_Weekdays_C.png"}
|
||||
4 {set RKIcon "521_1_00_RP_Weekend_C.png"}
|
||||
default {set RKIcon ""}
|
||||
}
|
||||
}
|
||||
|
||||
if {$rsvicon ne ""} {
|
||||
set rsvicon "<img src='images/$rsvicon' height=15>
|
||||
}
|
||||
if {$RKIcon ne ""} {
|
||||
set RKIcon "<img src='images/$RKIcon' height=15>
|
||||
}
|
||||
|
||||
# puts "<td>{$r(ulslot)}</td>"
|
||||
puts "<td>$b</td><td>$name</td>"
|
||||
puts "<td>[clock format $r(nduration) -format %T]</td>"
|
||||
puts "<td>$r(usLcn)</td>"
|
||||
puts "<td>[string range $r(szSvcName) 1 end]</td>"
|
||||
puts "<td>[clock format $r(nsttime) -format {%c %Z}]</td>"
|
||||
puts "<td>$rsvicon $RKIcon</td>"
|
||||
puts "<td>$r(szCRID)</td>"
|
||||
puts "</tr>"
|
||||
}
|
||||
puts "</table>"
|
||||
$db close
|
||||
|
41
var/mongoose/include/services.jim
Executable file
@ -0,0 +1,41 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
set services [split [exec /mod/bin/service mlist]]
|
||||
|
||||
proc button {state service action} {
|
||||
puts -nonewline "<a href=#>"
|
||||
puts -nonewline "<img border=0 src=/img/$state.png"
|
||||
puts -nonewline " onClick=\"go('$service', '$action'); "
|
||||
puts -nonewline "toggle(this); return false\">"
|
||||
puts "</a>"
|
||||
}
|
||||
|
||||
proc control {s a} {
|
||||
return "<a href=/cgi-bin/service.jim?action=$a&service=$s>"
|
||||
}
|
||||
|
||||
foreach service $services {
|
||||
set data [split $service ":"]
|
||||
set name [lindex $data 0]
|
||||
set installed [lindex $data 1]
|
||||
set auto [lindex $data 2]
|
||||
set running [lindex $data 3]
|
||||
|
||||
puts "<tr class=even><td>$name</td>"
|
||||
if (!$installed) {
|
||||
puts "<td colspan=3><i>Not installed</i></td></tr>"
|
||||
continue
|
||||
}
|
||||
|
||||
puts "<td>"
|
||||
if ($auto) { button on $name auto } else { button off $name auto }
|
||||
puts "</td>"
|
||||
|
||||
puts "<td>"
|
||||
if ($running) { button on $name toggle } else {
|
||||
button off $name toggle }
|
||||
puts "</td>"
|
||||
|
||||
puts "</tr>"
|
||||
}
|
||||
|
35
var/mongoose/include/status.jim
Executable file
@ -0,0 +1,35 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
set ::env(PATH) "/mod/bin/busybox:/mod/bin:/bin"
|
||||
|
||||
set pid [exec pgrep humaxtv]
|
||||
|
||||
if {[catch {set line [exec lsof -p $pid | grep Video | fgrep .ts]} ]} {
|
||||
exit
|
||||
}
|
||||
|
||||
regsub -all -- {[[:space:]]+} $line " " line
|
||||
set fields [split $line " "]
|
||||
set size [lindex $fields 6]
|
||||
|
||||
sleep 2
|
||||
|
||||
set line [exec lsof -p $pid | grep Video | fgrep .ts]
|
||||
regsub -all -- {[[:space:]]+} $line " " line
|
||||
set fields [split $line " "]
|
||||
set size2 [lindex $fields 6]
|
||||
|
||||
if { $size2 > $size } {
|
||||
set mode "Recording"
|
||||
set icon "745_1_11_Video_1REC.png"
|
||||
} else {
|
||||
set mode "Watching"
|
||||
set icon "745_1_10_Video_2Live.png"
|
||||
}
|
||||
|
||||
set name [lindex [split $line "/"] end]
|
||||
|
||||
puts "<div class=shadowbox><div>"
|
||||
puts "<img src=/images/$icon>$mode $name"
|
||||
puts "</div></div>"
|
||||
|
12
var/mongoose/lib/altrow
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
if {[expr ! [exists -proc altrow ]]} {
|
||||
proc altrow {} {{i 0}} {
|
||||
if { $i == 0 } {
|
||||
puts "<tr class=odd>"
|
||||
} else {
|
||||
puts "<tr class=even>"
|
||||
}
|
||||
set i [expr ! $i]
|
||||
}
|
||||
}
|
||||
|
9
var/mongoose/lib/cat
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
if {[expr ! [exists -proc cat ]]} {
|
||||
proc cat {file} {
|
||||
if {[catch {set fp [open $file r]]} { return }
|
||||
puts [read $fp]
|
||||
close $fp
|
||||
}
|
||||
}
|
||||
|
192
var/mongoose/lib/epg.class
Normal file
@ -0,0 +1,192 @@
|
||||
|
||||
if {[expr ! [exists -proc class ]]} { package require oo }
|
||||
if {[expr ! [exists -proc sqlite3.open ]]} { package require sqlite3 }
|
||||
|
||||
source /mod/var/mongoose/lib/progressbar
|
||||
|
||||
set channeldb [sqlite3.open /var/lib/humaxtv/channel.db]
|
||||
|
||||
# * service_id, event_id, start, duration, encrypted, name, text
|
||||
# * warning, content code, content type,
|
||||
# * event CRID, series CRID, rec CRID
|
||||
|
||||
class epg {
|
||||
service_id 0
|
||||
event_id 0
|
||||
start 0
|
||||
duration 0
|
||||
encrypted 0
|
||||
name ""
|
||||
text ""
|
||||
warning ""
|
||||
content_code 0
|
||||
content_type ""
|
||||
event_crid ""
|
||||
series_crid ""
|
||||
rec_crid ""
|
||||
|
||||
channel_num 0
|
||||
channel_name ""
|
||||
}
|
||||
|
||||
epg method channel {chnum chname} {
|
||||
set channel_num $chnum
|
||||
set channel_name $chname
|
||||
}
|
||||
|
||||
epg method _parse {line} {
|
||||
set vars [split $line "\t"]
|
||||
|
||||
set service_id [lindex $vars 0]
|
||||
set event_id [lindex $vars 1]
|
||||
set start [lindex $vars 2]
|
||||
set duration [lindex $vars 3]
|
||||
set encrypted [lindex $vars 4]
|
||||
set name [lindex $vars 5]
|
||||
set text [lindex $vars 6]
|
||||
set warning [lindex $vars 7]
|
||||
set content_code [lindex $vars 8]
|
||||
set content_type [lindex $vars 9]
|
||||
set event_crid [lindex $vars 10]
|
||||
set series_crid [lindex $vars 11]
|
||||
set rec_crid [lindex $vars 12]
|
||||
}
|
||||
|
||||
epg method percent {} {
|
||||
set now [clock seconds]
|
||||
if {$start > $now} { return 0 }
|
||||
if {$start + $duration < $now} { return 100 }
|
||||
return [expr [expr $now - $start] * 100 / $duration]
|
||||
}
|
||||
|
||||
epg method showing {} {
|
||||
set percent [$self percent]
|
||||
if {$percent > 0 && $percent < 100} { return 1 } else { return 0 }
|
||||
}
|
||||
|
||||
epg method elapsed {} {
|
||||
set percent [$self percent]
|
||||
if {$percent == 0} { return 0 }
|
||||
if {$percent == 100} { return $duration }
|
||||
return [expr $duration * $percent / 100]
|
||||
}
|
||||
|
||||
epg method remaining {} {
|
||||
return [expr $duration - [$self elapsed]]
|
||||
}
|
||||
|
||||
epg method cell {} {
|
||||
set name [$self get name]
|
||||
set text [$self get text]
|
||||
|
||||
set percent [$self percent]
|
||||
|
||||
puts "<td nowrap valign=top title=\"$text\">"
|
||||
|
||||
set img ""
|
||||
switch -- [$self get content_code] {
|
||||
1 { set img "Movie" }
|
||||
2 { set img "News" }
|
||||
3 { set img "Show" }
|
||||
4 { set img "Sports" }
|
||||
5 { set img "Children" }
|
||||
6 { set img "Music" }
|
||||
7 { set img "Art" }
|
||||
8 { set img "Society" }
|
||||
9 { set img "Education" }
|
||||
10 { set img "Leisure" }
|
||||
}
|
||||
if {$img != ""} {
|
||||
puts "<img src=/images/173_3_00_G3_$img.png height=14
|
||||
alt=\"[$self get content_type]\"
|
||||
title=\"[$self get content_type]\"
|
||||
>"
|
||||
}
|
||||
if {[$self get series_crid] != ""} {
|
||||
puts "<img src=/images/178_1_00_Icon_Serise.png height=14>"
|
||||
}
|
||||
puts "
|
||||
<a href=/cgi-bin/epg_dump.jim?service=[$self get service_id]&event=[$self get event_id]>
|
||||
$name</a>"
|
||||
|
||||
puts "<br>"
|
||||
|
||||
puts "<font class=footnote>"
|
||||
puts "[clock format [$self get start] -format %H:%M]"
|
||||
puts " ([clock format [$self get duration] -format %T])"
|
||||
if {$percent > 0 && $percent < 100} {
|
||||
puts "<br>[progressbar $percent]"
|
||||
puts "$percent% [clock format [$self elapsed] -format %T] /
|
||||
[clock format [$self remaining] -format %T]"
|
||||
}
|
||||
puts "</font>"
|
||||
puts "</td>"
|
||||
}
|
||||
|
||||
epg method next {} {
|
||||
set tm [expr [$self get start] + [$self get duration] + 60]
|
||||
set nextlist [epg fetch dump -service [$self get service_id] -time $tm]
|
||||
|
||||
if {[llength nextlist] > 0} {
|
||||
return [lindex $nextlist 0]
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
proc {epg parse} {line} {
|
||||
set e [epg new]
|
||||
$e _parse $line
|
||||
return $e
|
||||
}
|
||||
|
||||
proc {epg cleanup} {} {
|
||||
global channeldb
|
||||
|
||||
$channeldb close
|
||||
}
|
||||
|
||||
proc {epg exec} {mode args} {
|
||||
set raw 0
|
||||
set cmd [list /mod/bin/epg]
|
||||
set extra ""
|
||||
foreach arg $args {
|
||||
if {[string first "-" $arg] == 0} {
|
||||
switch -- $arg {
|
||||
-raw { set raw 1 }
|
||||
-crid { lappend cmd -C $args($arg) }
|
||||
-type { lappend cmd -T $args($arg) }
|
||||
-service { lappend cmd -S $args($arg) }
|
||||
-event { lappend cmd -E $args($arg) }
|
||||
-time { lappend cmd -@ $args($arg) }
|
||||
-extra { set extra $args($arg) }
|
||||
default { error "Invalid option, $arg" }
|
||||
}
|
||||
}
|
||||
}
|
||||
if { $raw == 0 } { lappend cmd -p }
|
||||
lappend cmd $mode
|
||||
lappend cmd $extra
|
||||
|
||||
#puts "CMD -$cmd-"
|
||||
|
||||
return [exec {*}$cmd]
|
||||
}
|
||||
|
||||
proc {epg fetch} {mode args} {
|
||||
global channeldb
|
||||
|
||||
foreach line [split [epg exec $mode {*}$args] "\n"] {
|
||||
set record [epg parse $line]
|
||||
set chan [lindex [$channeldb query {
|
||||
select szSvcName, usLcn from TBL_SVC
|
||||
where usSvcId = %s} "[$record get service_id]"
|
||||
] 0]
|
||||
$record channel $chan(usLcn) \
|
||||
[string range $chan(szSvcName) 1 end]
|
||||
|
||||
lappend records $record
|
||||
}
|
||||
return $records
|
||||
}
|
||||
|
10
var/mongoose/lib/progressbar
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
if {[expr ! [exists -proc progressbar ]]} {
|
||||
proc progressbar {percent} {
|
||||
set pos [expr 118 - $percent / 100.0 * 118]
|
||||
return "<img src=/img/percentimage.png
|
||||
alt=\"$percent%\" class=progress
|
||||
style=\"background-position: -${pos}px 0;\">"
|
||||
}
|
||||
}
|
||||
|