# utilities taken from ui.itcl and lj_utils.itcl # added initialization code for globals used within ui proc get_verbose_title { program episodic mrgeptitlenum } { # Non episodic programmes - return "Not An Episode" # No episode number or title - return "No Episode Title" # Episode number only - return "ep xxx" # Title only - return title no quotes, see comments above. # if merge=1, Episode number and title - return "ep xxx, " if { $episodic == 1 } { set eptitle "" set epnumstring "" set eptitleraw [strim [dbobj $program get EpisodeTitle]] #only retrieve episode number if it'll be used if { $eptitleraw == "" || $mrgeptitlenum == 1 } { set epnumraw [strim [dbobj $program get EpisodeNum]] # get episode number from tmsid if needed if { $epnumraw == "" } { if {[set tmsid [dbobj $program get TmsId]] != ""} { regsub -all {^0+} [string range $tmsid 8 11] {} epnumraw } } if { $epnumraw != "" } { append epnumstring "Episode " $epnumraw } } if { $mrgeptitlenum == 1 && $epnumstring != "" && $eptitleraw != "" } { # merge requested title and number available append eptitle $epnumstring ", " $eptitleraw } elseif { $eptitleraw == "" && $epnumstring != "" } { # no title, but a number. Better than nothing. set eptitle $epnumstring } elseif { $eptitleraw != "" } { # title append eptitle $eptitleraw } else { # no title or number! set eptitle "No Episode Title" } } else { set eptitle "Not an Episode" } return $eptitle } proc desc_show {inp_desc} { if { $::conf(DescriptionShow) == 1 && $inp_desc != "" } { set desctext [html_encode $inp_desc] regsub -all {\"} $desctext {\"} desctext set desctext " <small><small>$desctext</small></small>" } else { set desctext "" } return $desctext } proc UIGetCancelReason { item } { return [lindex {{Switched To Live TV} {Recorded A Different Showing} {Stayed On Live TV} {Internal Error} {Power Was Off} Expired {Got A Better Suggestion} {Demo Mode} {Unexpected Conflict} {User Requested Recording} {User Requested Season Pass} {Explicitly Deleted} {Channel Lineup Changed} {Program Guide Changed} {Recorder Emergency} {User Cancelled Season Pass} {Fuzzies Turned Off} {Fuzzy Stopped Early} Unknown {Program Source Conflict} {Converted Live Cache} {Live Cache Only Successful} {Program Source Disk Conflict} {Explicitly Deleted From To Do} {Program Source Modified} {Not Authorized} {No Re-record} {No Signal} {Max Recordings Exceeded} {Capture Request Expired} {No Signal Tuner One} {No Signal Tuner Two} {Max Recordings Now Showing} {Video Manager Denied Tuner}} $item] } proc alt_showing {tofind_tmsid tofind_fsid {servid ""}} { global db if {$servid != ""} { set id "A[string trimleft [string range $servid 1 end] 0]:" logit id set ll {} ForeachMfsFile fsid name type "/Recording/NoReRecord" $id { if [PrefixMatches $id $name] { RetryTransaction { set obj [db $db openid $fsid] set show [dbobj $obj gettarget Showing] } return [list "todo" $show] } } } if {$tofind_tmsid==""} {return ""} set showings [get_programshowings $tofind_fsid 1] foreach showing $showings { set seconds [lindex $showing 0] set stationfsid [lindex $showing 1] set date [expr $seconds / 86400] set time [expr $seconds % 86400] set timestr [format "%05d" $time] ForeachMfsFile recfsid name type "/Recording/Active" "4:$date:$timestr:" { RetryTransaction { set rec [db $db openid $recfsid] set show [dbobj $rec get Showing] set prog [dbobj $show get Program] set id [dbobj $prog get TmsId] if {$id == $tofind_tmsid} { return "todo [dbobj $show fsid]/[dbobj $show subobjid]" } } } } # Also check if it's in Now Showing ForeachMfsFile recfsid name type "/Recording/TmsId" "$tofind_tmsid:" { RetryTransaction { set rec [db $db openid $recfsid] set show [dbobj $rec get Showing] return "nowshowing [dbobj $show fsid]/[dbobj $show subobjid]" } } return "" } proc RecConflicts { recfsid showing2start showing2end } { global db RetryTransaction { set rec [db $db openid $recfsid] set showing1 [dbobj $rec get Showing] set showing1realstart [expr [dbobj $showing1 get Date] * 86400 + [dbobj $showing1 get Time]] set showing1start [expr $showing1realstart - [defaultval 0 [dbobj $rec get StartPadding]]] set showing1end [expr $showing1realstart + [dbobj $showing1 get Duration] + [defaultval 0 [dbobj $rec get EndPadding]]] if { (($showing1start >= $showing2start) && ($showing1start < $showing2end)) || (($showing1end > $showing2start) && ($showing1end <= $showing2end)) || (($showing1start <= $showing2start) && ($showing1end >= $showing2end))} { if {$::version >= 3} { set recbeh [dbobj $rec get RecordingBehavior] set seltype [dbobj $recbeh get PresentationBehavior] } else { set seltype [dbobj $rec get SelectionType] } if { $seltype == 6 } { return 1 } else { return 2 } } else { return 0 } } } proc RecConflictsList { showingstart showingend } { global db set cancellist {} set cancellistsug {} for {set i -1} {$i <= 1} {incr i} { set date [expr $showingstart / 86400 + $i] ForeachMfsFile fsid name type "/Recording/Active" "4:$date:" { set skip 0 if { [scan name "4:%d:%d:" scandate scantime] == 2 } { regsub {^0+([1-9])} $scantime {\1} scantime set scansecs [expr $scandate * 86400 + $scantime] if {$scansecs < [expr $showingstart - 86400]} { set skip 1 } if {$scansecs > $showingend} { return [list $cancellist $cancellistsug] } } if {!$skip} { set conflicts [RecConflicts $fsid $showingstart $showingend] if { $conflicts == 1 } { lappend cancellistsug $fsid } elseif { $conflicts == 2 } { lappend cancellist $fsid } } } } return [list $cancellist $cancellistsug] } proc GetConflictsList { showingfsid startearlysecs endlatesecs } { global db RetryTransaction { if { [regexp {([0-9]*)/(.*)} $showingfsid junk fsid subobjid] } { set showing [db $db openid $fsid $subobjid] } else { set showing [db $db openid $showingfsid] } set date [dbobj $showing get Date] set time [dbobj $showing get Time] set duration [dbobj $showing get Duration] set showingstart [expr $date * 86400 + $time] set showingend [expr $showingstart + $duration + $endlatesecs] set showingstart [expr $showingstart - $startearlysecs] } set cancellists [RecConflictsList $showingstart $showingend] set cancellist [lindex $cancellists 0] return $cancellist } # Channel 4 # Guide 11 # Name 3 proc DeleteTodoRec { recfsid cancelreason errorstring } { global db set canceldate [expr [clock seconds] / 86400] set canceltime [expr [clock seconds] % 86400] RetryTransaction { set rec [db $db openid $recfsid] set state [dbobj $rec get State] if { $state != 6 } { return 0 } else { dbobj $rec set CancelReason $cancelreason dbobj $rec set CancelDate $canceldate dbobj $rec set CancelTime $canceltime dbobj $rec set ErrorString $errorstring dbobj $rec set State 2 } } return 1 } # LJ's Utilities module. # # Based very heavily on other parts of TiVoWeb! # # LJ @ http://www.tivocommunity.com/ # # 29Dec02 11:48 v1.0 Slotfree module. # 30Dec02 17:30 v2.0 New search code; return icon with conflict details. # 30Dec02 22:38 v2.1 Show conflict.png instead of broken link for conflicts. # 30Dec02 23:20 v2.2 Shorter tooltips! # 31Dec02 13:26 v2.3 Show four different icons for conflicts. # 01Jan03 17:24 v2.4 Different icon for a free slot; ignore suggestions when deciding if a slot is free; remove alt text. # 25Jan03 16:50 v3.0 Add thumbs modification module. # 16Feb03 15:38 v3.1 Add get_thumbimagelj - standard proc, but also returns confidence value. # 23Feb03 10:50 v3.2 Scan for existing PrefsElement before creating a new one. # 18May03 15:34 v3.3 Add logic for Type 16 thumbs data. # 16Aug03 19:43 v3.4 Include currently recording programme (if any) in slotfree calculation. # 31Jan04 10:04 v3.5 Fixes a bug in the thumbs module when reseting thumbs. Thanks Adlopa! # **** REMOVE /n FROM TOOLTIP !!! **** # modified to use lists and return confid if needed -- btux9 proc get_thumbimage {score {xtra 0}} { set thumbdata [ReadableThumbs $score] scan $thumbdata "%s %d %d" thumbtype numthumbs confid set n [expr $numthumbs+3] if {$thumbtype == "Predicted"} { set imagenum [lindex {14 15 16 -1 17 18 19} $n] } else { set imagenum [lindex {9 6 4 -1 12 2 7} $n] } if {$xtra} {return [list $imagenum $confid]} else { return $imagenum } } proc slotfree {seconds duration {chan 0}} { global db global images set slotstartdate [expr $seconds / 86400] set slotstarttime [expr $seconds - ($slotstartdate * 86400)] set slotenddate [expr ($seconds + $duration) / 86400] set slotendtime [expr ($seconds + $duration) - ($slotenddate * 86400)] set foundearlierrec 0 set foundlaterrec 0 set slotfull 0 set reason "" set recs [mfs scan "/Recording/Active" -start "3:[expr $slotstartdate - 1]:" -count 2] scan [lindex [lindex $recs 0] 1] "%d:%d:%d:%d" rectype recstartdate recstarttime recfsid scan [lindex [lindex $recs 1] 1] "%d:%d:%d:%d" dummy recstartdate recstarttime recfsid set lasttest [lindex [lindex $recs 0] 1] if {[info exists recstartdate] == 0} { return [img slotfree.png "Slot may be free; could not find any records." "width=\"20\" height=\"20\""] } while { [expr ($recstartdate * 86400) + $recstarttime] < $seconds } { set recs [mfs scan "/Recording/Active" -start "[lindex [lindex $recs 1] 1]" -count 2] if { [llength $recs] < 2 } { break } scan [lindex [lindex $recs 1] 1] "%d:%d:%d:%d" dummy recstartdate recstarttime recfsid set lasttest [lindex [lindex $recs 0] 1] set foundearlierrec 1 } while { $lasttest != "" } { set recs [mfs scan "/Recording/Active" -start $lasttest -count 2] set lasttest [lindex [lindex $recs 1] 1] scan [lindex [lindex $recs 0] 1] "%d:%d:%d:%d" dummy recstartdate recstarttime recfsid if { $recstartdate > $slotenddate } { set foundlaterrec 1 break } if { ($recstartdate == $slotenddate) && ($recstarttime >= $slotendtime) } { set foundlaterrec 1 break } set rec [db $db openid $recfsid] set rectype [dbobj $rec get SelectionType] if { $rectype == 6 } { continue } set startpad [dbobj $rec get StartPadding] set endpad [dbobj $rec get EndPadding] set showing [dbobj $rec get Showing] set recdur [dbobj $showing get Duration] set recend [expr ($recstartdate * 86400) + $recstarttime + $startpad + $endpad + $recdur] set recenddate [expr $recend / 86400] set recendtime [expr $recend - ($recenddate * 86400)] if { $recenddate < $slotstartdate } { set foundearlierrec 1 continue } if { ($recenddate == $slotstartdate) && ($recendtime <= $slotstarttime) } { set foundearlierrec 1 continue } incr slotfull 1 set recstartsecs [expr ($recstartdate * 86400) + $recstarttime] if {$::lang == "en"} { set starttimestr [ftime $recstartsecs "%H:%M"] } else { set starttimestr [ftime $recstartsecs "%l:%M %P"] } set recendsecs [expr $recend] if {$::lang == "en"} { set endtimestr [ftime $recendsecs "%H:%M"] } else { set endtimestr [ftime $recendsecs "%l:%M %P"] } set station [dbobj $showing get Station] set recchannel [dbobj $station get CallSign] set program [dbobj $showing get Program] set recseries [dbobj $program get Title] # \n or " " here: set reason "$reason$starttimestr-$endtimestr $recchannel: $recseries.\n" } set reason [string trimright $reason] regsub -all {\{} $reason "" reason regsub -all {\}} $reason "" reason if { $slotfull > 0 } { # \n or " " here: return [img conflict[expr {$slotfull > 4 ? "4" : "$slotfull"}].png "$slotfull scheduled:\n$reason" "width=\"20\" height=\"20\""] } else { if { ($foundlaterrec == 1) || ([llength $recs] != 2) } { return [img slotfree.png "No recordings currently scheduled in this slot." "width=\"20\" height=\"20\""] } else { return [img slotfree.png "Slot may be free ;) Send LJ this error message: E$foundearlierrec$foundlaterrec:$recstartdate:$recstarttime:$slotenddate:$slotendtime" "width=\"20\" height=\"20\""] } } } # replaced get_thumbimagelj with a modified get_thumbimage --btux9