Merge pull request 'Updates to rsv.class and epg,class to support the new schedchk package' (#6) from MymsMan/webif:schedchk into master

This commit is contained in:
af123 2020-06-03 10:36:22 +00:00
commit a67f5a9b70
2 changed files with 160 additions and 22 deletions

View File

@ -185,33 +185,37 @@ epg method get_rsv {} {
} }
} }
epg method process_sched {} { epg method process_sched {{debug 0}} {
$self scheduled $self scheduled $debug
} }
set rsvlookup "" set rsvlookup ""
epg method scheduled {} { epg method scheduled {{debug 0}} {
global rsvlookup global rsvlookup
if {$sched_type >= 0} { return $sched_type } if {$sched_type >= 0} { return $sched_type }
set sched_type 0 set sched_type 0
if {$rsvlookup eq ""} { if {$rsvlookup eq ""} {
set st [clock milliseconds]
set rsvlookup [rsv lookuptab] set rsvlookup [rsv lookuptab]
#puts $rsvlookup if {$debug} {
puts "mS $([clock milliseconds] - $st) --- $rsvlookup"
}
} }
set p 0 set p 0
foreach key [list \ foreach key [list \
"$service_id:$event_id" \ "$service_id:$event_id" \
"$channel_hsvc:$event_id" \
[string tolower "$service_id:$channel_crid$series_crid"] \ [string tolower "$service_id:$channel_crid$series_crid"] \
[string tolower "$service_id:$channel_crid$event_crid"] \ [string tolower "$channel_crid$series_crid:$channel_crid$event_crid"] \
] { ] {
#puts "Check key ($key)" if {$debug} { puts "Check key ($key)" }
if {[dict exists $rsvlookup $key]} { if {[dict exists $rsvlookup $key]} {
set p $rsvlookup($key) set p $rsvlookup($key)
#puts "FOUND ($p)" if {$debug} {puts "FOUND ($p)"}
break break
} }
} }
@ -219,14 +223,34 @@ epg method scheduled {} {
switch $p { switch $p {
S { set sched_type 2 } S { set sched_type 2 }
E { set sched_type 1 } E { set sched_type 1 }
R { set sched_type 3 }
X { set sched_type 4 }
default { set sched_type 0 } default { set sched_type 0 }
} }
#puts "SCHED_TYPE: ($sched_type)" if {$debug} { puts "SCHED_TYPE: ($sched_type)" }
return $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}} { epg method icon_set {{height 0}} {
if {$height > 0} { set height "height=$height" } else { set height "" } if {$height > 0} { set height "height=$height" } else { set height "" }
set icon [$self type_icon] set icon [$self type_icon]
@ -431,9 +455,9 @@ proc {epg dbfetch} {mode args} {
" "
} }
-crid { append q \ -crid { append q \
"and e.event_crid = '$v' " } "and e.event_crid = '$v' collate nocase " }
-scrid { append q \ -scrid { append q \
"and e.series_crid = '$v' " } "and e.series_crid = '$v' collate nocase " }
-type { append q \ -type { append q \
"and e.content_code = $v " } "and e.content_code = $v " }
-service { append q \ -service { append q \
@ -479,7 +503,7 @@ proc {epg dbfetch} {mode args} {
lappend params "%$v%" lappend params "%$v%"
} }
append q ") " append q ") "
} }
-param { lappend params $v } -param { lappend params $v }
-nocase { append q "collate nocase " } -nocase { append q "collate nocase " }
default { error "Invalid option, $arg" } default { error "Invalid option, $arg" }

136
webif/lib/rsv.class Executable file → Normal file
View File

@ -158,6 +158,10 @@ rsv method isseries {} {
if {$ucRecKind == 4} { return 1 } else { return 0 } if {$ucRecKind == 4} { return 1 } else { return 0 }
} }
rsv method issplit {} {
if {$ucRecKind == 2} { return 1 } else { return 0 }
}
rsv method _strip {str} { rsv method _strip {str} {
return [system strip $str] return [system strip $str]
} }
@ -208,7 +212,7 @@ rsv method channel_name {} {
rsv method szsttime_stamp {} { rsv method szsttime_stamp {} {
set spaced [regsub {^(....)(..)(..)(..)(..)(..).*} \ set spaced [regsub {^(....)(..)(..)(..)(..)(..).*} \
$szsttime {\1 \2 \3 \4 \5 \6}] $szsttime {\1 \2 \3 \4 \5 \6}]
if {[catch { if {[catch {
set stamp [clock scan $spaced -format "%Y %m %d %H %M %S"] set stamp [clock scan $spaced -format "%Y %m %d %H %M %S"]
}]} { }]} {
@ -308,6 +312,10 @@ rsv method iconset {{height 20}} {
return $iconlist return $iconlist
} }
rsv method set {ivName val} {
set $ivName $val
}
rsv method setorigstart {o} { rsv method setorigstart {o} {
set _origstart $o set _origstart $o
} }
@ -336,6 +344,81 @@ rsv method set_refresh {} {
set aulEventToRecordInfo "" set aulEventToRecordInfo ""
} }
rsv method update_aul {new_event old_aul} {
# Add new_event (optional) to 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} { rsv method set_skip {event} {
set action 5 set action 5
@ -471,8 +554,8 @@ rsv method apply_skip {service event} {
lassign [epg dbfetch dump -service $service -event $event] epg lassign [epg dbfetch dump -service $service -event $event] epg
if {$epg eq ""} { if {$epg eq ""} {
error "Cannot find event in EPG." error "Cannot find event in EPG."
} }
$epg get_channel_info $epg get_channel_info
# First check to see if there is already a pending skip for this # First check to see if there is already a pending skip for this
@ -489,7 +572,7 @@ rsv method apply_skip {service event} {
$ev set_skip $epg $ev set_skip $epg
if {[catch {$ev insert_deferred} msg]} { if {[catch {$ev insert_deferred} msg]} {
error "Error during insert." error "Error during insert."
} }
} }
rsv method remove_pending {} { rsv method remove_pending {} {
@ -665,7 +748,8 @@ proc {rsv lookuptab} {} {
foreach tab {tbl_reservation pending} { foreach tab {tbl_reservation pending} {
set res [[rsv dbhandle] query " set res [[rsv dbhandle] query "
select usSvcId, usevtid, ucCRIDType, szCRID, select usSvcId, usevtid, ucCRIDType, szCRID,
ucRecKind ucRecKind, aulEventToRecordInfo,
szRecordedProgCrid
from $tab left join channel.TBL_SVC from $tab left join channel.TBL_SVC
on $tab.hSvc = channel.TBL_SVC.hSvc on $tab.hSvc = channel.TBL_SVC.hSvc
where ersvtype <= 3 where ersvtype <= 3
@ -687,11 +771,41 @@ proc {rsv lookuptab} {} {
} else { } else {
continue continue
} }
set records([\
string tolower "$rec(usSvcId):$rec(szCRID)"]) $p foreach r [split $rec(szRecordedProgCrid) "|"] {
if {$r != {}} {
set records([string tolower "\
$rec(szCRID):\
[string range $r 1 end]"]) "R"
}
}
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
}
} }
} }
# Add all skipped episodes for all series
set skiplist [rsv _skiplist]
foreach skip $skiplist {
set records($skip) "X"
}
return $records return $records
} }
@ -1114,7 +1228,7 @@ proc {rsv restore} {file} {
# Need to fix up the AUL table service IDs too. # Need to fix up the AUL table service IDs too.
set newaul "" set newaul ""
foreach aul [$rsv aul] { foreach aul [$rsv aul] {
# {service start end event_id} # {service start end event_id}
lassign $aul ohsvc start end eid lassign $aul ohsvc start end eid
if {![dict exists $hsvcmap $ohsvc]} { if {![dict exists $hsvcmap $ohsvc]} {
# Should not happen # Should not happen
@ -1153,7 +1267,7 @@ proc {rsv restore} {file} {
puts "Restoring skiplist..." puts "Restoring skiplist..."
set fields "ulslot state service_id event_id hSvc start set fields "ulslot state service_id event_id hSvc start
ucCRIDType szCRID szSkipCRID" ucCRIDType szCRID szSkipCRID"
foreach line $data { foreach line $data {
set vals [lrange [lassign [split $line "\t"] key] 0 end-1] set vals [lrange [lassign [split $line "\t"] key] 0 end-1]
@ -1348,7 +1462,7 @@ proc {rsv allevents} {{xota 0}} {
incr start 86400 incr start 86400
incr end 86400 incr end 86400
# Sun == 0 # Sun == 0
set day [clock format $start -format "%w"] set day [clock format $start -format "%w"]
@ -1377,7 +1491,7 @@ proc {rsv allevents} {{xota 0}} {
{*}$trailer] {*}$trailer]
} }
} }
} }
return $xevents return $xevents