#!/mod/bin/jimsh package require cgi source /mod/webif/lib/setup header require epg.class spinner.class altrow epg_search totop puts { <link type="text/css" href="/css/xepg.css" rel="Stylesheet" /> <script type=text/javascript src=/js/enadis.js></script> } [spinner new { text "Loading EPG Information..." size "1.2em" style "margin: 1em;" }] start require epg_popup set now [clock seconds] set stt [cgi_get stt $now] if {$stt <= $now} { set stt $now set current 1 } else { set current 0 } set favgroup [[settings] channel_group] set hours [expr 1.0 * [[settings] xepghours]] if {$hours == 0} { set hours 4.0 } set seconds $($hours * 3600) set ostt $stt set stt [expr int($stt / 1800.0) * 1800] set ett $(int($stt + $seconds)) set offset $(($ostt - $stt) / 1800.0) set chanpx 160 set eventpx 1000 set totalpx $($chanpx + $eventpx) set contwidth $($totalpx + 50) set hourpx $($eventpx / $hours) set minpx $($hourpx / 60.0) set secpx $($minpx / 60.0) set start [clock milliseconds] if {$::qepg} { if {$favgroup} { set records [epg dbfetch dump \ -trange "$stt:$ett" -fav $favgroup] } else { set records [epg dbfetch dump -trange "$stt:$ett"] } } else { require channelsort set records [channelsort [epg fetch dump -trange "$stt:$ett"]] } set got [clock milliseconds] proc but {label time {active 1}} { puts -nonewline "<button style=\"margin-right: 2em\" tt=$time" if {$active} { puts -nonewline " class=nav" } else { puts -nonewline " disabled class=\"nav ui-state-disabled\"" } puts " active=$active>$label</button>" } puts "<!-- Hours $hours ($seconds) -->" puts "<div id=buttons style=\"width: $eventpx; margin-left: ${chanpx}px;\">" but "<< -1 Week" $($stt - 3600 * 24 * 7) \ $($stt - $now + 3600 >= 3600 * 24 * 7) but "<< -1 Day" $($stt - 3600 * 24) $($stt - $now >= 3600 * 23) but "<< Earlier", $($stt - 3600 * 4) $($stt > $now) but "< Now >" $now $($current == 0) but ">> Later" $ett; but ">> +1 Day" $($stt + 3600 * 24) $($stt < $now + 8 * 3600 * 24) but ">> +1 Week" $($stt + 3600 * 24 * 7) $($stt < $now + 8 * 3600 * 24) puts "</div>" puts " <script type=text/javascript> \$('button.nav').button(); </script> <div id=xepg style=\"min-width: ${contwidth}px; overflow: auto\"> <div id=xepgnow></div> <div id=xegrid> " puts "<div id=epgdate style=\"width: ${eventpx}px; margin-left: ${chanpx}px;\">" puts [clock format $stt -format {%a %d/%m/%Y}] puts "<input type=hidden id=xepg_dp stt=$stt>" puts "</div>" puts "<div class=xechan style=\"width: ${chanpx}px;\"> </div>" for {set i 0} {$i < $hours * 2} {incr i} { puts "<div class=xetime id=xe$i style=\"width: [expr $minpx * 30]px\">" puts "[clock format $($stt + 1800 * $i) -format "%H:%M"]</div>" } set lim 0 set lcn 0 set bg "odd" foreach e $records { set chnum [$e get channel_num] if {$chnum == 0} { continue } if {$chnum != $lcn} { puts "<div class=xechan style=\"width: ${chanpx}px;\">" puts "[$e channel_icon 30] " puts "$chnum <a href=/cgi-bin/epg/service.jim?service=[$e get service_id] title=\"[$e get channel_name]\"> [$e get channel_name] </a></div>" set lcn $chnum set le 0 set pos 0 if {$bg eq "odd"} { set bg "even" } else { set bg "odd" } } set es [$e get start] set ee [expr $es + [$e get duration]] if {$es < $le} continue if {$es < $stt} { set es $stt } if {$ee > $ett} { set ee $ett } set le $ee set left [expr int(($es - $stt) * $secpx)] set right [expr int(($ee - $stt - 1) * $secpx)] set px $($right - $left) if {$pos < $left} { set px $($px + $left - $pos - 1) } elseif {$pos > $left} { set px $($px - ($pos - $left - 1)) } incr pos $px $e process_sched set recopts 1 if {[$e get series_crid] ne ""} { set recopts 2 } set perc [$e percent] set showing 0 if {$perc > 0 && $perc < 100} { set showing 1 } set txt "[cgi_quote_html [$e get name]] <span>([\ clock format $es -format "%H:%M"] - [\ clock format $ee -format "%H:%M"])" if {$showing} { append txt " ($perc%)" } append txt "</span>" set htxt "[cgi_quote_html [$e get name]] ([\ clock format $es -format "%H:%M"] - [\ clock format $ee -format "%H:%M"])" if {$showing} { append hxt " ($perc%)" } puts "<div class=\"xeprog $bg\" style=\"width: [expr $px - 4]px;\" title=\"$htxt\"> <a class=event href=# xs=[$e get service_id] xe=[$e get event_id] sch=[$e get sched_type] rec=$recopts>" puts $txt puts "</a>" puts "</div>" } puts "<div id=keypos style=\"float: left; clear: left;\"></div>" puts "</div>" puts "</div>" set earlier $($stt - 3600 * 4) puts " <div style=\"clear: both;\"> <small><button id=epgswitch> Switch to standard now/next display. </button></small> </div> " puts " <script type=text/javascript> \$(document).ready(function() { \$('#epgswitch').button().click(function() { window.location = '/epg.shtml'; }); \$('button.nav').click(function() { window.location = '/cgi-bin/xepg.jim?stt=' + \$(this).attr('tt') + '&pos=' + \$('#xegrid').scrollTop(); }); \$('#xepg_dp').datepicker({ buttonImage: '/img/cal.gif', buttonImageOnly: true, showOn: 'button', dateFormat: '@', minDate: '[expr $now * 1000]', maxDate: '[expr ($now + 7 * 86400) * 1000]', onSelect: function(val, sel) { var stt = \$(this).attr('stt'); // Extract date part dval = Math.round(val / 86400000.0); // Extract current time part var tm = ~~(stt % 86400); var ret = dval * 86400 + tm; window.location = '/cgi-bin/xepg.jim?stt=' + ret; } }); \$('img.ui-datepicker-trigger').hover( function() { \$(this).css('cursor', 'pointer'); }, function() { \$(this).css('cursor', 'auto'); } ); " if {$current} { puts { var kt = $('#xe0'); var ktpos = kt.position(); var height = $('#keypos').position().top - ktpos.top; } puts "var nowpos = ktpos.left + (kt.width() * $offset);" puts { if (window.console) console.log('NOWPOS: %d', nowpos); $('#xepgnow') .css('left', nowpos + 'px') .css('top', ktpos.top) .height(height) .show('slow'); } } puts " }); </script> " puts " <a href=/cgi-bin/settings.jim> <img border=0 height=14 src=/images/421_1_00_CH_Title_2R_Arrow.png> Visit settings to change EPG options. </a><br> " epg cleanup set end [clock milliseconds] puts "<font class=footnote> Retrieved in: [expr [expr $got - $start] / 1000.0] seconds. </font>" footer