diff --git a/CONTROL/control b/CONTROL/control index ae41312..91ad02b 100644 --- a/CONTROL/control +++ b/CONTROL/control @@ -1,7 +1,7 @@ Package: webif Priority: optional Section: web -Version: 1.0.7-2 +Version: 1.0.7-3 Architecture: mipsel Maintainer: af123@hummypkg.org.uk Depends: webif-channelicons(>=1.1.4),mongoose(>=3.0-9),jim(>=0.73-1),jim-oo,jim-sqlite3(>=0.73-1),jim-cgi(>=0.7),jim-binary,service-control(>=1.2),busybox(>=1.20.2-1),lsof,epg(>=1.0.13),hmt(>=1.1.14),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2),stripts(>=1.2.3),smartmontools,tmenu(>=1.05),ffmpeg,id3v2,multienv(>=1.6) diff --git a/var/mongoose/cgi-bin/backup/backup.jim b/var/mongoose/cgi-bin/backup/backup.jim index 3353ee5..1bb48df 100755 --- a/var/mongoose/cgi-bin/backup/backup.jim +++ b/var/mongoose/cgi-bin/backup/backup.jim @@ -5,7 +5,7 @@ source /mod/webif/lib/setup require rsv.class -set dir /mod/var/backup +set dir "/mod/var/backup" httpheader @@ -26,58 +26,12 @@ if {[string match {auto-*} $file]} { } } -set ffile "/$dir/$file.rbk" +set ffile "$dir/$file.rbk" if {[file exists $ffile]} { puts "Backup file $file already exists." exit } -if {[catch { set fd [open $ffile w] } msg]} { - puts "Error creating backup file. - $msg" - exit -} - -puts "Backing up scheduled recordings and events..." - -set events [rsv list] - -set fields [lsort [[rsv] vars]] - -#puts $fd "# [join $fields "\t"]" - -foreach event $events { - puts " Backing up scheduled event '[$event name]'" - puts -nonewline $fd "event\t" - - foreach f $fields { - if {$f eq "aulEventToRecordInfo"} { continue } - puts -nonewline $fd "[$event get $f]\t" - } - puts $fd "" -} -puts "Done." - -puts "Backing up channel favourites..." - -set grp 0 -foreach res [$rsvdb query { - select eFavGroup, - TBL_FAV.eSvcType, - substr(szSvcName, 2) as szSvcName, - favIdx - from TBL_FAV join TBL_SVC using (hSvc) - order by eFavGroup, favIdx - }] { - if {$res(eFavGroup) != $grp} { - set grp $res(eFavGroup) - puts " Group $grp" - } - puts " $res(szSvcName)" - puts $fd "fav\t$res(eFavGroup)\t$res(eSvcType)\t$res(szSvcName)\t$res(favIdx)" -} -puts "Done." - -close $fd -rsv cleanup +rsv backup $ffile diff --git a/var/mongoose/cgi-bin/backup/restore.jim b/var/mongoose/cgi-bin/backup/restore.jim index bea17ec..6f50166 100755 --- a/var/mongoose/cgi-bin/backup/restore.jim +++ b/var/mongoose/cgi-bin/backup/restore.jim @@ -3,9 +3,9 @@ package require cgi source /mod/webif/lib/setup -require rsv.class findhsvc system.class +require rsv.class -set dir /mod/var/backup +set dir "/mod/var/backup" httpheader @@ -15,121 +15,7 @@ if {$file == 0} { exit } -set ffile "/$dir/$file.rbk" +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] - } - - # Don't restore DSO events. - if {$vars(ersvtype) == 11} { continue } - - 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} - -$rsvdb query {drop table if exists pending.fav} -$rsvdb query {create table pending.fav ( - favIdx integer primary key autoincrement unique, - hSvc integer(4), - eFavGroup integer(4), - [eSvcType] integer(4) - )} - -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 idx [lindex $vals 4] - if {$idx eq ""} { set idx 0 } - set hsvc [get_channel_attr $chan] - - if {$grp != $group} { - set grp $group - puts " Group $grp" - } - - puts " $chan" - - if {$hsvc eq ""} { - puts " Cannot map channel name to service." - continue - } - - set query " - insert into pending.fav(favIdx, hSvc, eFavGroup, eSvcType) - values($idx, $hsvc, $group, $type); - " - - $rsvdb query $query -} - -$rsvdb query {commit transaction;} - -system restartpending - -close $fd -rsv cleanup +rsv restore $ffile diff --git a/var/mongoose/lib/findhsvc b/var/mongoose/lib/findhsvc index 8231434..337c2c7 100755 --- a/var/mongoose/lib/findhsvc +++ b/var/mongoose/lib/findhsvc @@ -1,6 +1,6 @@ if {![exists -proc get_channel_attr]} { - require rsv.class + if {![exists -proc rsv]} { require rsv.class } proc get_channel_attr {channel {field hSvc}} { global rsvdb diff --git a/var/mongoose/lib/rsv.class b/var/mongoose/lib/rsv.class index 80d3174..13c4328 100755 --- a/var/mongoose/lib/rsv.class +++ b/var/mongoose/lib/rsv.class @@ -499,3 +499,172 @@ proc {rsv construct} {event type} { return [rsv new $args] } +proc {rsv backup} {file} { + global rsvdb + + if {[catch { set fd [open $file w] } msg]} { + error "Error creating backup file. - $msg" + } + + puts "Backing up scheduled recordings and events..." + + set events [rsv list] + + set fields [lsort [[rsv] vars]] + + #puts $fd "# [join $fields "\t"]" + + foreach event $events { + puts " Backing up scheduled event '[$event name]'" + puts -nonewline $fd "event\t" + + foreach f $fields { + if {$f eq "aulEventToRecordInfo"} { continue } + puts -nonewline $fd "[$event get $f]\t" + } + puts $fd "" + } + puts "Done." + + puts "Backing up channel favourites..." + + set grp 0 + foreach res [$rsvdb query { + select eFavGroup, + TBL_FAV.eSvcType, + substr(szSvcName, 2) as szSvcName, + favIdx + from TBL_FAV join TBL_SVC using (hSvc) + order by eFavGroup, favIdx + }] { + if {$res(eFavGroup) != $grp} { + set grp $res(eFavGroup) + puts " Group $grp" + } + puts " $res(szSvcName)" + puts $fd "fav\t$res(eFavGroup)\t$res(eSvcType)\t$res(szSvcName)\t$res(favIdx)" + } + puts "Done." + + close $fd +} + +proc {rsv restore} {file} { + global rsvdb + require findhsvc + + if {![file exists $file]} { + error "Backup file $file does not exist." + } + + if {[catch { set fd [open $file r] } msg]} { + error "Error opening $file - $msg" + } + + 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] + } + + # Don't restore DSO events. + if {$vars(ersvtype) == 11} { continue } + + 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} + + $rsvdb query {drop table if exists pending.fav} + $rsvdb query {create table pending.fav ( + favIdx integer primary key autoincrement unique, + hSvc integer(4), + eFavGroup integer(4), + [eSvcType] integer(4) + )} + + 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 idx [lindex $vals 4] + if {$idx eq ""} { set idx 0 } + set hsvc [get_channel_attr $chan] + + if {$grp != $group} { + set grp $group + puts " Group $grp" + } + + puts " $chan" + + if {$hsvc eq ""} { + puts " Cannot map channel name to service." + continue + } + + set query " + insert into + pending.fav(favIdx, hSvc, eFavGroup, eSvcType) + values($idx, $hsvc, $group, $type); + " + + $rsvdb query $query + } + + $rsvdb query {commit transaction;} + + system restartpending + + close $fd +} + diff --git a/var/mongoose/lib/system.class b/var/mongoose/lib/system.class index 7fd4ac9..95d9561 100644 --- a/var/mongoose/lib/system.class +++ b/var/mongoose/lib/system.class @@ -275,3 +275,11 @@ proc {system notify} {msg} { $logfd close } +proc {system display} {hdr hd} { + if {[system model] eq "HDR"} { + exec /sbin/display $hdr + } else { + exec /sbin/display "\$$hd" + } +} + diff --git a/var/mongoose/lib/ts.class b/var/mongoose/lib/ts.class index cc1d269..00d0906 100644 --- a/var/mongoose/lib/ts.class +++ b/var/mongoose/lib/ts.class @@ -352,6 +352,11 @@ proc {ts resetnew} {dir} { } } + if {!$tot} { + file delete "$dir/.series" + return + } + set fd [open "$dir/.series"] set bytes [read $fd] close $fd