diff --git a/CONTROL/control b/CONTROL/control
index 50131f5..868aa8c 100644
--- a/CONTROL/control
+++ b/CONTROL/control
@@ -1,10 +1,10 @@
Package: webif
Priority: optional
Section: web
-Version: 1.2.2-5
+Version: 1.2.2-6
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
-Depends: webif-channelicons(>=1.1.17),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.3),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.2)
+Depends: webif-channelicons(>=1.1.18),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.3),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.3)
Suggests:
Description: An evolving web interface for the Humax.
Tags: http://hummy.tv/forum/threads/5866/
diff --git a/CONTROL/postinst b/CONTROL/postinst
index 724a8fc..b4eeb5f 100755
--- a/CONTROL/postinst
+++ b/CONTROL/postinst
@@ -20,7 +20,7 @@ crontab=$PKG_ROOT/bin/crontab
if [ -x $crontab ]; then
$crontab -l | grep -v webif/lib/bin/auto > $tmpf
cat $tmpf - << EOM | $crontab -
-*/10 * * * * /mod/webif/lib/bin/auto >/dev/null 2>&1
+5,25,45 * * * * /mod/webif/lib/bin/auto >/dev/null 2>&1
EOM
fi
@@ -54,6 +54,9 @@ fi
hook=/mod/boot/xinit.d/rt3070
[ -f $hook ] && rm -f $hook
+# Remove legacy mongoose startup script
+[ -f /mod/etc/init.d/Z01mongoose ] && rm -f /mod/etc/init.d/Z01mongoose
+
# Migrate record log to new name.
(
cd /mod/tmp
diff --git a/etc/recmon.d/autotrigger b/etc/recmon.d/autotrigger
index f4d5bd7..079ccb7 100755
--- a/etc/recmon.d/autotrigger
+++ b/etc/recmon.d/autotrigger
@@ -1,17 +1,25 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
-require lock
+require system.class settings.class lock
+
+set loglevel [[settings] autolog]
set file [lindex $argv 0]
set dir [file dirname $file]
+set prefix "autotrigger\[[pid]\]"
+if {$loglevel > 0} { system plog auto "$prefix: will run for $dir" }
+
# Wait up to 10 minutes for any existing auto process to finish...
-if {![acquire_lock webif_auto 600]} {
+if {![acquire_lock webif_auto 600 5]} {
puts "Cannot acquire exclusive lock, terminating."
+ system plog auto "$prefix: failed to get lock"
exit
}
-release_lock webif_auto
+if {$loglevel > 0} { system plog auto "$prefix: got lock" }
-exec /mod/webif/lib/bin/auto -single $dir
+exec /mod/webif/lib/bin/auto -prelocked -logprefix "$prefix: " -singledir $dir
+
+if {$loglevel > 0} { system plog auto "$prefix: done" }
diff --git a/webif/html/sched/assets.jim b/webif/html/sched/assets.jim
index d609aec..11dd554 100755
--- a/webif/html/sched/assets.jim
+++ b/webif/html/sched/assets.jim
@@ -137,8 +137,6 @@ puts {
placeholder="Defaults to channel name"
class="text ui-widget-content ui-corner-all">
-
-
diff --git a/webif/lib/bin/auto b/webif/lib/bin/auto
index 0115da9..9f856de 100755
--- a/webif/lib/bin/auto
+++ b/webif/lib/bin/auto
@@ -10,29 +10,56 @@ set audiomp3 [$settings audiomp3]
set modules {decrypt dedup shrink mpg mp3 expire}
-if {![acquire_lock webif_auto]} {
- puts "Cannot acquire exclusive lock, terminating."
+
+set logfile "/mod/tmp/auto.log"
+
+set logfd "unset"
+set logprefix ""
+set prelocked 0
+while {[llength $argv]} {
+ switch -- [lindex $argv 0] {
+ -d {
+ set loglevel 2
+ set logfd stdout
+ }
+ -prelocked {
+ set prelocked 1
+ }
+ -logprefix {
+ set argv [lrange $argv 1 end]
+ if {[llength $argv]} {
+ set logprefix [lindex $argv 0]
+ }
+ }
+ default {
+ # Unknown option, pass to rest of script.
+ break
+ }
+ }
+ set argv [lrange $argv 1 end]
+}
+
+if {!$prelocked && ![acquire_lock webif_auto 10 1]} {
+ if {$loglevel > 1} {
+ system plog auto "Could not acquire lock."
+ }
+ puts "Could acquire exclusive lock, terminating."
exit
}
-set logfile "/mod/tmp/auto.log"
# Rotate log file if large enough.
if {[file exists $logfile] && [file size $logfile] > 2097152} {
file copy -force $logfile "/mod/tmp/auto_old.log"
file delete $logfile
}
-if {[lindex $argv 0] eq "-d"} {
- set argv [lrange $argv 1 end]
- set loglevel 2
- set logfd stdout
-} else {
+if {$logfd eq "unset"} {
set logfd [open "/mod/tmp/auto.log" "a+"]
}
proc log {msg {level 1}} {
if {$level > $::loglevel} return
- puts $::logfd "[system logtimestamp] - $msg"
+ puts $::logfd "[system logtimestamp] - $::logprefix$msg"
flush $::logfd
}
@@ -55,6 +82,8 @@ foreach mod $modules {
set "hook_pre$mod" {}
set "hook_post$mod" {}
set "hook_post${mod}scan" {}
+ set "hook_pre${mod}singledir" {}
+ set "hook_post${mod}singledir" {}
}
proc register {type fn {priority 50}} {
@@ -72,10 +101,14 @@ proc runplugin {name {ts 0}} {
global $var
foreach p [lsort -index end -decreasing -integer [subst $$var]] {
lassign $p fn priority
- log "Running $name plugin $fn (priority $priority)" 2
- if {[catch {uplevel 1 $fn $ts} msg]} {
+ log "Running $name plugin $fn (priority $priority) \[$ts]" 2
+ if {[catch {uplevel 1 [list $fn $ts]} msg]} {
log "Plugin error: $msg" 0
+ foreach {proc file line} [info stacktrace] {
+ log " @ $file:$proc:$line" 0
+ }
}
+ log "Completed $name plugin $fn" 2
}
}
@@ -308,7 +341,11 @@ proc do_decrypt {ts} {
set helper 0
} else {
log " $file - Not yet indexed, trying helper."
- lassign [system dlnahelper [file normalize $file]] url
+ if {[catch {
+ lassign [system dlnahelper [file normalize $file]] url
+ } msg]} {
+ log " $file - $msg"
+ }
if {$url eq ""} {
log " $file - Can't use helper."
return
@@ -706,7 +743,9 @@ proc scansingle {dirs} {
log "Encountered special directory."
break
}
+ runplugin "pre${arg}singledir" $dir
xscan $dir $arg $sup 0
+ runplugin "post${arg}singledir" $dir
log "$arg scan completed in [elapsed $st] seconds."
}
}
@@ -717,12 +756,16 @@ file stat "$root/" rootstat
set rootdev $rootstat(dev)
log "Root device: $rootdev" 2
-if {[lindex $argv 0] eq "-single"} {
+if {[lindex $argv 0] eq "-singledir"} {
scansingle [lrange $argv 1 end]
} elseif {[llength $argv] > 0} {
set loglevel 2
foreach arg $argv {
set st [clock milliseconds]
+ if {$arg ni $modules} {
+ log "Unknown scan type: $arg"
+ continue
+ }
log "$arg scan starting."
set processed_files {}
runplugin "pre${arg}scan"
diff --git a/webif/lib/lock b/webif/lib/lock
index 5141070..300cf43 100644
--- a/webif/lib/lock
+++ b/webif/lib/lock
@@ -14,7 +14,7 @@ proc _lock_to_port {id} {
proc _lock_dummy {newsock addr port} { }
-proc acquire_lock {id {timeout 0}} {
+proc acquire_lock {id {timeout 0} {interval 0.2}} {
global _locks
set port [_lock_to_port $id]
@@ -24,7 +24,7 @@ proc acquire_lock {id {timeout 0}} {
while {[catch {set socket [\
socket stream.server "127.0.0.1:$port"]} msg]} {
if {[clock seconds] > $timeout} { return 0 }
- sleep 0.2
+ sleep $interval
}
set _locks($id) $socket