#!/mod/bin/jimsh package require cgi source /mod/webif/lib/setup require system.class findhsvc epg.class rsv.class set runmode cli if {[string match {*jim} $argv0]} { set runmode cgi } set schedtime 1200 case $runmode { cgi { set type [cgi_get type "full"] httpheader } cli { set type "full" if {"-X" in $argv} { set schedtime 7200 } } } if {[catch {set pid [exec pgrep humaxtv]}]} { puts "Cannot find humaxtv process." exit } proc get_data {} { global pid set ret {} if {[catch {set data \ [exec /mod/bin/lsof -p $pid | grep Video | fgrep .ts]} ]} { set ret {} } else { foreach line [split $data "\n"] { regsub -all -- {[[:space:]]+} $line " " line set name [file rootname [file tail $line]] if {[dict exists $ret $name]} { set ret($name) -1 } else { set size [lindex [split $line " "] 6] set ret($name) $size } } } return $ret } set play 0 set rec 0 set seen {} set output {} if {$type eq "full"} { set data [get_data] } else { set data {} } if {[llength $data]} { sleep 3 set ndata [get_data] foreach name [array names ndata] { if {![dict exists $seen $name]} { set seen($name) 0 } if {![dict exists $data $name]} { set data($name) 0 } if {$ndata($name) == -1} { incr rec incr play set mode "Chase Playing" set icon "745_1_11_Video_3REC_Live.png" } elseif {$ndata($name) > $data($name) && $seen($name) < 1} { incr rec set mode "Recording" set icon "745_1_11_Video_1REC.png" } else { incr play set mode "Playing" set icon "745_1_10_Video_2Live.png" } incr seen($name) if {$runmode eq "cgi"} { lappend output [concat \ "\n" \ " \n" \ " $mode $name\n" \ "\n" \ ] } else { lappend output "$mode $name" } } } if {![system instandby] && $play < 1} { set hsvc [system param CUR_SVC Value USERCONFIG] set ff [$rsvdb query " select usSvcid as svcid, usLcn as lcn, substr(szSvcName, 2) as name from channel.TBL_SVC where hSvc = $hsvc limit 1 "] if {[llength $ff] == 1} { lassign [lindex $ff 0] x svcid x lcn x name set epgs [epg dbfetch get \ -service $svcid \ -time [clock seconds]\ ] set prog "" if {[llength $epgs] == 1} { lassign $epgs epg set prog "- [$epg get name] (" append prog "[clock format [$epg get start] -format %H:%M] - " append prog "[clock format $([$epg get start] + [$epg get duration]) -format %H:%M]" append prog ") \[[$epg percent]%\]" } if {$runmode eq "cgi"} { lappend output [concat \ "\n" \ " [epg channelicon $name 30 \ {vertical-align: middle; padding: 0 4px 0 2px}]\n" \ " Watching $lcn: $name $prog\n" \ "\n" \ ] } else { lappend output "Watching $lcn: $name $prog" } } } if {[system instandby]} { if {$runmode eq "cgi"} { lappend output [concat \ "\n" \ " \n" \ " System is in standby.\n" \ "" \ ] } else { lappend output "System is in standby." } } set events [rsv list tbl_reservation \ " where ersvtype = 3 and nsttime - [clock seconds] < $schedtime and nsttime > [clock seconds] "] foreach event $events { if {$runmode eq "cgi"} { set icon "175_1_11_Reservation_Record.png" lappend output [concat \ "\n" \ " \n" \ " Will record [$event name]" \ " on [$event channel_name] at"\ " [clock format [$event get nsttime] -format {%H:%M}]" \ " \n" \ "\n" \ } else { lappend output [concat \ "Will record '[$event name]' " \ "on [$event channel_name] at " \ "[clock format [$event get nsttime] -format {%H:%M}]" \ ] } } if {[llength $output]} { if {$runmode eq "cgi"} { puts [join $output "\n
\n"] } else { puts [join $output "\n"] } }