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