# 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 !!! **** proc slotfree {seconds duration chan} { global db global images global tzoffset #puts $chan "

Secs $seconds Dur $duration
" 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 # if { $rectype == 3 } { # set recstarttime [expr $recstarttime + 2] # if { $recstarttime > 86399 } { # set recstarttime [expr $recstarttime - 86400] # set recstartdate [expr $recstartdate + 1] # } #puts $chan "Active: *$recs*
" # set recs [lreplace $recs 0 0 "dummy dummy:$recstartdate:$recstarttime:$recfsid"] #puts $chan "New r: *$recs*
" # } scan [lindex [lindex $recs 1] 1] "%d:%d:%d:%d" dummy recstartdate recstarttime recfsid set lasttest [lindex [lindex $recs 0] 1] while { [expr ($recstartdate * 86400) + $recstarttime] < $seconds } { #puts $chan "In while loop
" set recs [mfs scan "/Recording/Active" -start "[lindex [lindex $recs 1] 1]" -count 2] if { [llength $recs] < 2 } { #puts $chan "breaking
" 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 #puts $chan "Found earlier
" } while { $lasttest != "" } { #puts $chan "In 2nd 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 #puts $chan "Found later1
" break } if { ($recstartdate == $slotenddate) && ($recstarttime >= $slotendtime) } { set foundlaterrec 1 #puts $chan "Found later2: $recstartdate $slotenddate $recstarttime $slotendtime
" 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 #puts $chan "Found earlier2
" continue } if { ($recenddate == $slotstartdate) && ($recendtime <= $slotstarttime) } { set foundearlierrec 1 #puts $chan "Found earlier3
" continue } #puts $chan "Conflict
" incr slotfull 1 set recstartsecs [expr ($recstartdate * 86400) + $recstarttime + $tzoffset] if {$::uktivo} { set starttimestr [clock format $recstartsecs -format "%H:%M"] } else { set starttimestr [clock format $recstartsecs -format "%l:%M %P"] } set recendsecs [expr $recend + $tzoffset] if {$::uktivo} { set endtimestr [clock format $recendsecs -format "%H:%M"] } else { set endtimestr [clock format $recendsecs -format "%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. " } set reason [string trimright $reason] regsub -all {\{} $reason "" reason regsub -all {\}} $reason "" reason if { $slotfull > 0 } { # \n or " " here: return "[img "title=\"$slotfull scheduled: $reason\"" "conflict[expr {$slotfull > 4 ? "4" : "$slotfull"}].png"]" } else { if { ($foundlaterrec == 1) || ([llength $recs] != 2) } { return "[img "title=\"No recordings currently scheduled in this slot.\"" "slotfree.png"]" } else { return "[img "title=\"Slot may be free ;) Send LJ this error message: E$foundearlierrec$foundlaterrec:$recstartdate:$recstarttime:$slotenddate:$slotendtime\"" "slotfree.png"]" } } } proc action_thumbs { chan objectid env } { global db set fsid "" eval $env puts $chan [html_start "Modify Thumbs"] if { $fsid == "" } { set ethmblabels "3 2 1 0 -1 -2 -3 Unset" set ethmbvals "3 2 1 0 -1 -2 -3 -999" set thmblabels "3 2 1 0 -1 -2 -3" set thmbvals "3 2 1 0 -1 -2 -3" if {[string index $objectid 0] == "/"} { set objectid [string range $objectid 1 end] } RetryTransaction { set series [db $db openid $objectid] set title [strim [dbobj $series get Title]] set score [dbobj $series get ThumbData] } puts $chan [h2 $title] if { $score == "" } { puts $chan "No Thumb Rating Currently Set" set numthumbs 1 set thumbtype "Not" } else { set thumbdata [ReadableThumbs $score] scan $thumbdata "%s %d %d" thumbtype numthumbs thumbconf puts $chan [html_table_start "" "" ""] puts $chan [tr "ALIGN=CENTER" [th "COLSPAN=3" "Current Setting"]] puts $chan [tr "ALIGN=CENTER" [th "Thumbs"] [th "Type"] [th "Confidence"]] puts $chan [tr "ALIGN=CENTER" [td $numthumbs] [td $thumbtype] [td $thumbconf]] puts $chan [html_table_end] } puts $chan [html_form_start "POST" "/thumbs" "name=\"setthumbs\""] if { $thumbtype == "Explicit" || $thumbtype == "Implied" } { puts $chan [tr "" [td "Set Explicit Thumb Rating: "] [td "" [html_form_select "newthmb" $ethmbvals $ethmblabels $numthumbs]]] } else { puts $chan [tr "" [td "Set Explicit Thumb Rating: "] [td "" [html_form_select "newthmb" $thmbvals $thmblabels $numthumbs]]] } puts $chan [html_form_input "hidden" "fsid" $objectid] puts $chan [html_form_input "hidden" "orgthmb" $numthumbs] puts $chan [html_form_input "hidden" "title" $title] puts $chan [html_form_input "hidden" "thumbtype" $thumbtype] puts $chan [html_form_input "submit" "submit" "Set"] puts $chan [html_form_end] } else { set thumbsdir15 "/Preference/a/15" set thumbsdir16 "/Preference/a/16" puts $chan [h2 $title] if { $thumbtype == "Explicit" && $orgthmb == $newthmb } { puts $chan "Thumbs Already Explicitly Set To $newthmb ;)" } else { if { $newthmb == -999 } { RetryTransaction { set series [db $db openid $fsid] set serverid [dbobj $series get ServerId] dbobj $series set ThumbData "0x10000000" set thmbrec [db $db open "$thumbsdir15/$serverid"] dbobj $thmbrec markasrubbish regsub -all {[^a-zA-Z0-9]} $title "" titlesearch set thm16rec [lindex [get_fsidbyprefix "$thumbsdir16" "$titlesearch"] 0] if { $thm16rec != "" } { set thmbrec [db $db openid $thm16rec] puts $chan "
(You have previously recorded this series)

" dbobj $thmbrec markasrubbish } } event send $TmkEvent::EVT_DATA_CHANGED $TmkDataChanged::VIEWER_PREFERENCES $serverid puts $chan "
Thumbs Now Unset" } else { switch -- $newthmb { 3 {set xthmbval "0x100303ff"} 2 {set xthmbval "0x100302ff"} 1 {set xthmbval "0x100301ff"} 0 {set xthmbval "0x100300ff"} -1 {set xthmbval "0x1003ffff"} -2 {set xthmbval "0x1003feff"} -3 {set xthmbval "0x1003fdff"} } scan $xthmbval %x thmbval RetryTransaction { set series [db $db openid $fsid] set serverid [dbobj $series get ServerId] dbobj $series set ThumbData $thmbval if { [catch {set thmbrec [db $db open "$thumbsdir15/$serverid"]}] != 1 } { set Version [dbobj $thmbrec get Version] dbobj $thmbrec set Version [expr $Version + 1] dbobj $thmbrec set Thumbsness $thmbval regsub -all {[^a-zA-Z0-9]} $title "" titlesearch set thm16rec [lindex [get_fsidbyprefix "$thumbsdir16" "$titlesearch"] 0] if { $thm16rec != "" } { set thmbrec [db $db openid $thm16rec] puts $chan "
(You have previously recorded this series)

" set Version [dbobj $thmbrec get Version] dbobj $thmbrec set Version [expr $Version + 1] dbobj $thmbrec set Thumbsness $thmbval } } else { set thmbrec [db $db create PrefsElement] dbobj $thmbrec set Type 15 dbobj $thmbrec set IntKeyValue 1 dbobj $thmbrec set Viewer a dbobj $thmbrec set Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec set StringKeyValue $serverid dbobj $thmbrec set Item $series dbobj $thmbrec set Thumbsness $thmbval set norerec [lindex [get_fsidbyprefix "/Recording/NoReRecord" "[expr $serverid + 1]:"] 0] if { $norerec != "" } { set norerec [db $db openid $norerec] puts $chan "
(You have previously recorded this series)

" set noshow [dbobj $norerec get Showing] set progid [dbobj $noshow gettarget Program] set progiddb [dbobj $noshow get Program] set progid [string range $progid 0 [expr [string first "/" $progid] - 1]] set thmbrec [db $db create PrefsElement] dbobj $thmbrec set Version 1 dbobj $thmbrec set Type 16 dbobj $thmbrec set IntKeyValue $progid dbobj $thmbrec set Viewer a dbobj $thmbrec set Thumbsness $thmbval dbobj $thmbrec set Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec add Vector 0 dbobj $thmbrec set StringKeyValue $title dbobj $thmbrec set Item $progiddb } } } event send $TmkEvent::EVT_DATA_CHANGED $TmkDataChanged::VIEWER_PREFERENCES $serverid puts $chan "
Thumbs Value Set To $newthmb" } } } } proc get_thumbimagelj {score} { set thumbdata [ReadableThumbs $score] scan $thumbdata "%s %d %d" thumbtype numthumbs thumbconf if {$thumbtype == "Predicted"} { switch -- $numthumbs { -3 {set imagenum 14} -2 {set imagenum 15} -1 {set imagenum 16} 1 {set imagenum 17} 2 {set imagenum 18} 3 {set imagenum 19} default {set imagenum -1} } } else { switch -- $numthumbs { -3 {set imagenum 9} -2 {set imagenum 6} -1 {set imagenum 4} 1 {set imagenum 12} 2 {set imagenum 2} 3 {set imagenum 7} default {set imagenum -1} } } return "$imagenum $thumbconf" }