forked from hummypkg/webif
379 lines
8.3 KiB
Tcl
Executable File
379 lines
8.3 KiB
Tcl
Executable File
#!/mod/bin/jimsh
|
|
|
|
package require cgi
|
|
source /mod/webif/lib/setup
|
|
require altrow rsv.class progressbar epg.class system.class svc.class
|
|
|
|
noheader
|
|
set renderstart [clock milliseconds]
|
|
|
|
set svcmap {}
|
|
lmap i \
|
|
[$::channeldb query {select hSvc, usSvcid from TBL_SVC}] \
|
|
{
|
|
set svcmap([lindex $i 1]) [lindex $i 3]
|
|
}
|
|
set svckeys [array names svcmap]
|
|
|
|
set conflictstart [clock milliseconds]
|
|
set conflicts [rsv newconflicts [system tuners] "xlist"]
|
|
set conflicttime [expr {([clock milliseconds] - $conflictstart) / 1000.0}]
|
|
|
|
if {[llength $conflicts] > 1} {
|
|
puts "<div class=warningbox><div><center>
|
|
Your recording schedule contains conflicts; shown in pink below.
|
|
</center></div></div>"
|
|
}
|
|
|
|
require epg_popup
|
|
puts "<div id=list_output class=hidden></div>"
|
|
|
|
set pkey_tags {
|
|
1 "Pending unschedule"
|
|
2 "Pending padding change"
|
|
3 "Pending padding change"
|
|
4 "Pending folder change"
|
|
5 "Pending episode skip"
|
|
6 "Pending refresh"
|
|
}
|
|
|
|
proc eventheader {{table TBL_RESERVATION} note} {
|
|
if {$table eq "pending"} {
|
|
set sortlist {[[6,0]]}
|
|
} else {
|
|
set sortlist {[[5,0]]}
|
|
}
|
|
|
|
puts "
|
|
<fieldset id=sched_fs_$table class=sched>
|
|
<legend>
|
|
"
|
|
puts "<h3>$note</h3>"
|
|
puts "
|
|
</legend>
|
|
<table class=\"schedule tablesorter\" data-sortlist=\"$sortlist\">
|
|
<thead>
|
|
<tr>
|
|
<th data-sorter=false> </th>
|
|
"
|
|
|
|
if {$table eq "pending"} { puts "<th>Action</th>" }
|
|
|
|
puts {
|
|
<th> </th>
|
|
<th data-sorter=false> </th>
|
|
<th>Channel</th>
|
|
<th data-sorter=programme>Programme</th>
|
|
<th data-sorter=xdate>Start Time</th>
|
|
<th>Duration</th>
|
|
<th data-sorter=false>Mode</th>
|
|
<th data-sorter=false> </th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
}
|
|
}
|
|
|
|
proc eventrow {event {table TBL_RESERVATION}} {
|
|
global svcmap svckeys num_ended conflicts pmap pkey_tags
|
|
|
|
set name [$event name]
|
|
|
|
set s [$event start]
|
|
set d [$event get nduration]
|
|
set e $($s + $d)
|
|
set n [clock seconds]
|
|
lassign [$event padded 1] sp ep
|
|
|
|
if {$n > $e + $ep && [$event get ersvtype] <= 3} {
|
|
set ended 1
|
|
incr num_ended
|
|
} else {
|
|
set ended 0
|
|
}
|
|
|
|
if {$d > 0 && $n >= $s - $sp && $n < $e + $ep} {
|
|
set showing 1
|
|
} else {
|
|
set showing 0
|
|
}
|
|
|
|
switch -- [$event status] {
|
|
"idle" -
|
|
"ready" { set showing 0 }
|
|
"arwatch" { set showing 2; set ended 0 }
|
|
"recording" { set showing 1; set ended 0 }
|
|
}
|
|
|
|
if {$table eq "pending"} { set showing 0 }
|
|
|
|
set attrs "table=$table sid=[$event get ulslot] \
|
|
reckind=[$event get ucRecKind] rsvtype=[$event get ersvtype] \
|
|
ar=[expr {! [$event padded]}] ended=$ended"
|
|
|
|
set ek [ekey $event]
|
|
set opts 1
|
|
set tag ""
|
|
if {[dict exists $pmap $ek]} {
|
|
set act $pmap($ek)
|
|
|
|
switch $act {
|
|
1 -
|
|
5 {
|
|
append attrs " class=\"blueshade strike\""
|
|
set opts 0
|
|
}
|
|
2 -
|
|
3 -
|
|
4 {
|
|
set opts 0
|
|
append attrs " class=orangeshade"
|
|
}
|
|
6 {
|
|
append attrs " class=orangeshade"
|
|
}
|
|
}
|
|
if {[dict exists $pkey_tags $act]} {
|
|
set tag $pkey_tags($act)
|
|
}
|
|
|
|
}
|
|
|
|
altrow $attrs
|
|
|
|
# Checkbox
|
|
puts "<td><input type=checkbox class=schedselect></td>";
|
|
|
|
if {$table eq "pending"} {
|
|
puts "<td align=center>[$event pendingicon]</td>"
|
|
}
|
|
|
|
puts "<td>[$event get ulslot]</td>"
|
|
|
|
if {[$event get usLcn] ne ""} {
|
|
puts "
|
|
<td>
|
|
[epg channelicon [$event channel_name] 50]
|
|
</td>
|
|
<td nowrap>[$event get usLcn]<br>
|
|
[$event channel_name]</td>
|
|
"
|
|
} else {
|
|
puts "<td> <br><br></td><td> </td>"
|
|
}
|
|
|
|
puts "<td nowrap>
|
|
<a slot=[$event get ulslot] table=$table
|
|
href=# class=schedule>$name</a>"
|
|
if {
|
|
([$event get ucRecKind] == 4 && $name ne [$event folder]) ||
|
|
([$event get ucRecKind] == 1 && [$event folder] ne "")
|
|
} {
|
|
puts "<br><span class=also> (Folder: [$event folder])</span>"
|
|
}
|
|
|
|
if {$tag ne ""} {
|
|
puts "<br><span class=pendingnote> $tag</span>"
|
|
}
|
|
|
|
puts "</td>"
|
|
|
|
if {$ended} {
|
|
set ds "[clock format $s -format {%a %d %b %Y %H:%M}]"
|
|
puts "<td nowrap class=va>
|
|
--- -- --- ---- --:--<br>
|
|
<span class=footnote>(Last: $ds)</span>"
|
|
puts "</td><td>--:--:--</td>"
|
|
} else {
|
|
set elist [$event aul]
|
|
set skiplist [$event skiplist]
|
|
set ds "[clock format $s -format {%a %d %b %Y %H:%M}]"
|
|
puts "<td nowrap class=\"va"
|
|
if {$n > $e} { puts -nonewline " blood" }
|
|
if {"[$event get ulslot][$event end]" in $conflicts} {
|
|
puts -nonewline " pinkshade"
|
|
}
|
|
puts "\">"
|
|
|
|
if {[llength $elist] > 0} {
|
|
lassign [lindex $elist 0] service_id start end event_id
|
|
if {$start == $s && $service_id in $svckeys} {
|
|
puts "<a class=event href=#
|
|
xs=$svcmap($service_id) xe=$event_id>
|
|
<span class=ds>$ds</span></a>"
|
|
} else {
|
|
puts "<span class=ds>$ds</span>"
|
|
}
|
|
} else {
|
|
puts "<span class=ds>$ds</span>"
|
|
}
|
|
|
|
if {$showing == 1} {
|
|
set perc $(($n - ($s - $sp)) * 100 / \
|
|
($d + $sp + $ep))
|
|
puts "<br>"
|
|
puts "<img class=va
|
|
src=/images/745_1_11_Video_1REC.png>"
|
|
puts [progressbar $perc]
|
|
set opts 0
|
|
}
|
|
|
|
set c [llength $elist]
|
|
if {$c > 1} {
|
|
set i 0
|
|
set max 5
|
|
foreach e $elist {
|
|
lassign $e service_id start end event_id
|
|
if {$start == $s} continue
|
|
|
|
if {[incr i] == $max &&
|
|
[set remain $($c - $i)] > 1} {
|
|
puts "
|
|
<div class=\"moretoshow footnote\">
|
|
<center>
|
|
Click for $remain more...
|
|
</center>
|
|
</div>
|
|
<div class=\"hidden moretoshowc\">
|
|
"
|
|
} else {
|
|
puts "<br>"
|
|
}
|
|
|
|
set xcl "also"
|
|
if {"[$event get ulslot]${end}" in $conflicts} {
|
|
append xcl " pinkshade"
|
|
}
|
|
|
|
if {"$service_id:$event_id" in $skiplist} {
|
|
append xcl " strike"
|
|
}
|
|
|
|
puts "<span class=\"$xcl\">"
|
|
if {$service_id in $svckeys} {
|
|
puts "<a class=event href=#
|
|
xs=$svcmap($service_id) xe=$event_id>
|
|
[clock format $start \
|
|
-format {%a %d %b %Y %H:%M}]</a>"
|
|
if {$service_id != [$event get hsvc]} {
|
|
set svc [svc load hsvc $service_id]
|
|
set ch [$svc get szSvcName]
|
|
puts "<img width=15 src=\"[\
|
|
epg channeliconpath $ch]\""
|
|
puts "title=\"$ch\" alt=\"$ch\">"
|
|
}
|
|
} else {
|
|
puts "[clock format $start \
|
|
-format {%a %d %b %Y %H:%M}]
|
|
($service_id)<br>"
|
|
}
|
|
puts "</span>"
|
|
}
|
|
if {$i >= $max} {
|
|
puts "</div>"
|
|
}
|
|
}
|
|
|
|
puts "</td><td align=center>"
|
|
set xndur [$event get nduration]
|
|
if {$xndur > 0} {
|
|
puts "[clock format $xndur -format %H:%M]"
|
|
} else {
|
|
puts "--:--:--"
|
|
}
|
|
if {$showing == 1} {
|
|
puts "<br><img src=/img/blank.gif height=31>"
|
|
}
|
|
if {$c > 1} {
|
|
set i 0
|
|
foreach e $elist {
|
|
lassign $e service_id start end event_id
|
|
if {$start == $s} continue
|
|
if {[incr i] == $max && [expr {$c - $i}] > 1} {
|
|
puts "<div class=\"hidden moretoshowc\">"
|
|
} else {
|
|
puts "<br>"
|
|
}
|
|
puts "<span class=also>
|
|
[clock format $($end - $start) \
|
|
-format {%H:%M}]</span>"
|
|
}
|
|
if {$i >= $max} {
|
|
puts "</div>"
|
|
}
|
|
}
|
|
|
|
puts "</td>"
|
|
}
|
|
|
|
puts "<td nowrap>[join [$event iconset] ""]</td>"
|
|
|
|
puts "<td>"
|
|
if {$opts} {
|
|
puts "<a href=# class=smenu sid=[$event get ulslot]>
|
|
<img border=0 src=/img/more_btn.gif></a>"
|
|
}
|
|
puts "</td></tr>"
|
|
}
|
|
|
|
proc eventfooter {rawlink} {
|
|
global num_ended
|
|
|
|
puts "</tbody></table>"
|
|
puts "
|
|
<br>
|
|
<button class=selall>Select All</button>
|
|
<button class=selnone>Select None</button>
|
|
"
|
|
if {$num_ended} {
|
|
puts "
|
|
<button class=selended>Select Finished</button>
|
|
"
|
|
}
|
|
puts "
|
|
<button class=\"delselected red\">Delete Selected
|
|
<span class=delselcnt></span>
|
|
</button>
|
|
<button class=\"manual_rsv blue\">Manual Event</button>
|
|
<button class=rawview
|
|
path=\"$rawlink\"
|
|
>Raw Database</button>
|
|
</fieldset>
|
|
"
|
|
}
|
|
|
|
proc ekey {event} {
|
|
set ret ""
|
|
foreach key {ersvtype nsttime nduration hsvc usevtid} {
|
|
append ret ".[$event get $key]"
|
|
}
|
|
return $ret
|
|
}
|
|
|
|
set pmap {}
|
|
set events [rsv list pending]
|
|
set num_ended 0
|
|
if {[llength $events] > 0} {
|
|
eventheader pending "Pending Actions"
|
|
foreach event $events {
|
|
eventrow $event pending
|
|
set pmap([ekey $event]) [$event get action]
|
|
}
|
|
eventfooter "db=rsvp.db&tab=pending"
|
|
}
|
|
|
|
set events [rsv list]
|
|
set num_ended 0
|
|
eventheader live "Scheduled Events"
|
|
foreach event $events {
|
|
eventrow $event TBL_RESERVATION
|
|
}
|
|
eventfooter "db=rsv.db&tab=TBL_RESERVATION"
|
|
|
|
source assets.jim
|
|
|
|
puts "<div class=footnote>Conflict evaluation: $conflicttime seconds</div>"
|
|
|
|
footer
|
|
|