forked from hummypkg/webif
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:
commit
a67f5a9b70
|
@ -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" }
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue