diff --git a/webif/lib/epg.class b/webif/lib/epg.class index 3dac46a..a52b56b 100644 --- a/webif/lib/epg.class +++ b/webif/lib/epg.class @@ -185,33 +185,35 @@ epg method get_rsv {} { } } -epg method process_sched {} { - $self scheduled +epg method process_sched {{debug 0}} { + $self scheduled $debug } set rsvlookup "" -epg method scheduled {} { +epg method scheduled {{debug 0}} { global rsvlookup if {$sched_type >= 0} { return $sched_type } set sched_type 0 if {$rsvlookup eq ""} { + set st [clock milliseconds] set rsvlookup [rsv lookuptab] - #puts $rsvlookup + if {$debug} {puts "mS $([clock milliseconds]-$st) --- $rsvlookup} } set p 0 foreach key [list \ "$service_id:$event_id" \ + "$channel_hsvc:$event_id" \ [string tolower "$service_id:$channel_crid$series_crid"] \ [string tolower "$service_id:$channel_crid$event_crid"] \ ] { - #puts "Check key ($key)" + if {$debug} {puts "Check key ($key)"} if {[dict exists $rsvlookup $key]} { set p $rsvlookup($key) - #puts "FOUND ($p)" + if {$debug} {puts "FOUND ($p)"} break } } @@ -219,14 +221,35 @@ epg method scheduled {} { switch $p { S { set sched_type 2 } E { set sched_type 1 } + R { set sched_type 3 } + X { set sched_type 4 } default { set sched_type 0 } } - #puts "SCHED_TYPE: ($sched_type)" + if {$debug} {puts "SCHED_TYPE: ($sched_type)"} return $sched_type } + +proc {epg update_lookup_tab} {svcid evtid {add true} {type "S"} } { + global rsvlookup + # Update the reservations look up table (if present) with single entry + if {$rsvlookup==""} {return} + set key $svcid:$evtid + if {$add} { + # add new entry + dict set rsvlookup $key $type + } else { + # remove existing entry + if {[dict exists $rsvlookup $key]} { + dict unset rsvlookup $key + } + } + #puts "$svcid:$evtid $add $type == $rsvlookup " +} + + epg method icon_set {{height 0}} { if {$height > 0} { set height "height=$height" } else { set height "" } set icon [$self type_icon] @@ -431,9 +454,9 @@ proc {epg dbfetch} {mode args} { " } -crid { append q \ - "and e.event_crid = '$v' " } + "and e.event_crid = '$v' collate nocase " } -scrid { append q \ - "and e.series_crid = '$v' " } + "and e.series_crid = '$v' collate nocase " } -type { append q \ "and e.content_code = $v " } -service { append q \ diff --git a/webif/lib/rsv.class b/webif/lib/rsv.class old mode 100755 new mode 100644 index 7614f64..6ab2220 --- a/webif/lib/rsv.class +++ b/webif/lib/rsv.class @@ -308,6 +308,11 @@ rsv method iconset {{height 20}} { return $iconlist } +# source /df +rsv method set {ivName val} { + set $ivName $val +} + rsv method setorigstart {o} { set _origstart $o } @@ -336,6 +341,80 @@ rsv method set_refresh {} { set aulEventToRecordInfo "" } +rsv method update_aul {new_event old_aul} { + # Add new_event (optional) to the aulEventToRecordInfo and szEventToRecord + # remove old_aul (optional) from " " + # Maintain list in time order + set curauls [$self aul] + set ecrids [split $szEventToRecord "|"] + set evtaul {} + set insert 1 + set start 0 + # Do we have new event to add? + if {$new_event != 0 && $new_event !={}} { + set service_id [$new_event get channel_hsvc] + set start [$new_event get start] + set end [$new_event end] + set evtid [$new_event get event_id] + set evtaul [list $service_id $start $end $evtid] + set evtcrid [string toupper "1[$new_event get channel_crid][$new_event get event_crid]"] + set insert 0 + } + # rebuild aul and events list with new event in correct order + lmap aul $curauls ecrid $ecrids { + #puts "$aul $ecrid" + if {$aul == $old_aul} {continue; #remove current entry} + if {$aul == ""} {continue; #null entry} + if {!$insert && $start <= [lindex $aul 1]} { + set insert 1 + lappend newaul $evtaul + append newevnts "$evtcrid|" + } + lappend newaul $aul + append newevnts "$ecrid|" + } + # add to end if not inserted + if {!$insert} { + set insert 1 + lappend newaul $evtaul + append newevnts "$evtcrid|" + } + set action 5 + $self setaul [$self buildaul $newaul] + set szEventToRecord $newevnts + } + +rsv method set_next_event {} { + # Update reservation next event info in ucVolume + if {[string length $aulEventToRecordInfo] >0} { + binary scan [string range $aulEventToRecordInfo 0 15]\ + iiii service_id start end event_id + set dur $($end-$start) + if {$hsvc != $service_id || + $nsttime != $start || + $nduration != $dur || + $usevtid != $event_id} { + set nduration $dur + set ucVolume "$service_id:$event_id:$start" + } + } else { + # The next event is not yet in the EPG + set time $([clock seconds] - 86400) + set ucVolume "$hsvc:$usLastRecordedEvtId:$time" + } +} + +rsv method reset_next_event {} { + # Ensure our copy matches the updated reservation + if {$ucVolume!=0} { + lassign [split $ucVolume ":"] service_id event_id start + set hsvc $service_id + set nsttime $start + set usevtid $event_id + set ucVolume 0 + } +} + rsv method set_skip {event} { set action 5 @@ -665,7 +744,7 @@ proc {rsv lookuptab} {} { foreach tab {tbl_reservation pending} { set res [[rsv dbhandle] query " select usSvcId, usevtid, ucCRIDType, szCRID, - ucRecKind + ucRecKind, aulEventToRecordInfo from $tab left join channel.TBL_SVC on $tab.hSvc = channel.TBL_SVC.hSvc where ersvtype <= 3 @@ -687,8 +766,21 @@ proc {rsv lookuptab} {} { } else { continue } - set records([\ - string tolower "$rec(usSvcId):$rec(szCRID)"]) $p + set aul $rec(aulEventToRecordInfo) + + if {[string length $aul]} { + for {set i 0} {$i < [string length $aul]} {incr i 16} { + binary scan [string range $aul $i $($i + 15)]\ + iiii service start end event_id + set records([\ + string tolower "$service:$event_id"]) $p + } + + } else { + + set records([\ + string tolower "$rec(usSvcId):$rec(szCRID)"]) $p + } } }