source /mod/var/mongoose/lib/setup
if {![exists -proc class ]} { package require oo }
if {![exists -proc sqlite3.open ]} { package require sqlite3 }
require settings.class progressbar rsv.class
set ::channeldb 0
catch { set ::channeldb [sqlite3.open /var/lib/humaxtv/channel.db] }
set ::epgpath /mnt/hd1/dvbepg/epg.dat
set ::hdepgpath /media/drive1/epgsavedata
if {![file exists $::epgpath] && [file exists $::hdepgpath]} {
set ::epgpath $::hdepgpath
}
set ::rsvlookup [rsv lookuptab]
# * service_id, event_id, start, duration, encrypted, name, text
# * warning, content code, content type,
# * event CRID, series CRID, rec CRID
class epg {
service_id 0
event_id 0
start 0
duration 0
encrypted 0
name ""
text ""
warning ""
content_code 0
content_type ""
event_crid ""
series_crid ""
rec_crid ""
channel_num 0
channel_name ""
channel_crid ""
channel_hsvc 0
sched_type 0
rsv 0
}
epg method _parse {line} {
set vars [split $line "\t"]
set service_id [lindex $vars 0]
set event_id [lindex $vars 1]
set start [lindex $vars 2]
set duration [lindex $vars 3]
set encrypted [lindex $vars 4]
set name [lindex $vars 5]
set text [lindex $vars 6]
set warning [lindex $vars 7]
set content_code [lindex $vars 8]
set content_type [lindex $vars 9]
set event_crid [lindex $vars 10]
set series_crid [lindex $vars 11]
set rec_crid [lindex $vars 12]
}
epg method percent {} {
set now [clock seconds]
if {$start > $now} { return 0 }
if {$start + $duration < $now} { return 100 }
return [expr [expr $now - $start] * 100 / $duration]
}
epg method showing {} {
set percent [$self percent]
if {$percent > 0 && $percent < 100} { return 1 } else { return 0 }
}
epg method elapsed {} {
set percent [$self percent]
if {$percent == 0} { return 0 }
if {$percent == 100} { return $duration }
return [expr $duration * $percent / 100]
}
epg method remaining {} {
return [expr $duration - [$self elapsed]]
}
epg method type_icon {} {
set img ""
switch -- $content_code {
1 { set img "Movie" }
2 { set img "News" }
3 { set img "Show" }
4 { set img "Sports" }
5 { set img "Children" }
6 { set img "Music" }
7 { set img "Art" }
8 { set img "Society" }
9 { set img "Education" }
10 { set img "Leisure" }
}
if {$img != ""} {
return "/images/173_3_00_G3_$img.png"
} else {
return ""
}
}
proc {epg channelicon} {name {width 0} {style ""}} {
set str " 0} { append str " width=$width" }
if {$style ne ""} { append str " style=\"$style\" }
append str " alt=\"\">"
return $str
}
epg method channel_icon {{width 0} {style ""}} {
set str "
0} { append str " width=$width" }
if {$style ne ""} { append str " style=\"$style\" }
append str " alt=\"\">"
return $str
}
epg method get_channel_info {} {
global channeldb
if {!$channel_num && $channeldb != ""} {
set chan [lindex [$channeldb query {
select szSvcName, usLcn, aucDefaultAuthority, hsvc
from TBL_SVC
where usSvcId = %s} $service_id
] 0]
if {[dict exists $chan usLcn]} {
set channel_num $chan(usLcn)
set channel_name [string range $chan(szSvcName) 1 end]
set channel_crid [string toupper $chan(aucDefaultAuthority)]
set channel_hsvc $chan(hSvc)
}
}
}
epg method get_rsv {} {
if {$hsvc == 0} { $self get_channel_info }
if {$hsvc == 0} { return }
if {$rsv == 0 && $event_crid ne ""} {
set rsv [rsv entry $event_crid $hsvc]
}
if {$rsv == 0 && $series_crid ne ""} {
set rsv [rsv entry $series_crid $hsvc]
}
}
epg method icon_set {{height 0}} {
if {$height > 0} { set height "height=$height" } else { set height "" }
set icon [$self type_icon]
set set ""
if {$icon != ""} {
lappend set "
"
}
set sched_type 0
if {$event_crid ne "" && "$channel_hsvc$event_crid" in $::rsvlookup} {
set sched_type 1
lappend set \
"
"
} elseif {$series_crid ne "" &&
"$channel_hsvc$series_crid" in $::rsvlookup} {
set sched_type 2
}
if {$sched_type == 2} {
lappend set \
"
"
} elseif {$series_crid ne ""} {
lappend set \
"
"
}
if {$rec_crid ne ""} {
lappend set \
"
"
}
return $set
}
epg method cell {} {
set percent [$self percent]
puts "