#!/mod/bin/jimsh package require cgi source /mod/var/mongoose/lib/setup require rsv.class findhsvc system.class set dir /mod/var/backup puts "Content-Type: text/html" puts "" cgi_input #cgi_dump #set _cgi(restore_file) "backup-2011-Jul-09-20:37" if {![dict exists $_cgi restore_file]} { puts "No filename supplied." exit } set file [file tail [dict get $_cgi restore_file]] set ffile "/$dir/$file.rbk" if {![file exists $ffile]} { puts "Backup file $file does not exist." exit } if {[catch { set fd [open $ffile r] } msg]} { puts "Error opening $file - $msg" exit } puts "Restoring scheduled events from $file..." $rsvdb query {begin transaction;} $rsvdb query {delete from TBL_RESERVATION;} set fields [lsort [[rsv] vars]] set data [split [read $fd] "\n"] foreach line $data { set vals [split $line "\t"] if {[lindex $vals 0] ne "event"} { continue } set vars {} set i 0 foreach f $fields { if {$f eq "aulEventToRecordInfo"} { continue } incr i lappend vars $f [lindex $vals $i] } set rsv [rsv new $vars] # Need to fix up channel and CRID mappings in case something has # changed during a channel scan. puts " Restoring [$rsv name]" set bad 0 # First, the service number set ohsvc [$rsv get hsvc] if {$ohsvc > 0} { set hsvc [$rsv fix_hsvc] if {$hsvc == 0} { puts " Cannot find channel, restore failed." set bad 1 } elseif {$hsvc != $ohsvc} { puts -nonewline " Service number has " puts "changed $ohsvc -> $hsvc, fixing." } else { puts " No change in channel service." } } if {!$bad} { if {[catch {$rsv insert pending 1} msg]} { puts " Error inserting event, $msg" } } } $rsvdb query {commit transaction;} puts "Restoring favourite channels..." $rsvdb query {begin transaction;} $rsvdb query {delete from channel.TBL_FAV} set grp 0 foreach line $data { set vals [split $line "\t"] if {[lindex $vals 0] ne "fav"} { continue } set group [lindex $vals 1] set type [lindex $vals 2] set chan [lindex $vals 3] set hsvc [get_channel_attr $chan] if {$grp != $group} { set grp $group puts " Group $grp" } puts " $chan" if {!$hsvc} { puts " Cannot map channel name to service." continue } set query " insert into channel.TBL_FAV(hSvc, eFavGroup, eSvcType) values($hsvc, $group, $type); " $rsvdb query $query } $rsvdb query {commit transaction;} system restartpending close $fd rsv cleanup