forked from hummypkg/webif
1.3.5-3 + new scanner
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3510 2a923420-c742-0410-a762-8d5b09965624
This commit is contained in:
parent
caeabd15d0
commit
92a5c27401
@ -1,10 +1,10 @@
|
||||
Package: webif
|
||||
Priority: optional
|
||||
Section: web
|
||||
Version: 1.3.5-2
|
||||
Version: 1.3.5-3
|
||||
Architecture: mipsel
|
||||
Maintainer: af123@hpkg.tv
|
||||
Depends: tcpfix,webif-channelicons(>=1.1.24),lighttpd(>=1.4.39-1),jim(>=0.77),jim-oo(>=0.77),jim-sqlite3(>=0.76),jim-cgi(>=0.7-1),jim-binary(>=0.76),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.5),hmt(>=2.0.10),ssmtp,cron-daemon(>=1.18.3-3),at(>=3.1.18),anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.1.9),webif-charts(>=1.2-1),stripts(>=1.2.5-3),tmenu(>=1.21-1),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7),hwctl,nugget(>=0.95),sqlite3(>=3.15.1)
|
||||
Depends: tcpfix,webif-channelicons(>=1.1.24),lighttpd(>=1.4.39-1),jim(>=0.77),jim-oo(>=0.77),jim-sqlite3(>=0.76),jim-cgi(>=0.7-1),jim-binary(>=0.76),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.5),hmt(>=2.0.10),ssmtp,cron-daemon(>=1.18.3-3),at(>=3.1.18),anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.1.9),webif-charts(>=1.2-1),stripts(>=1.2.5-3),tmenu(>=1.21-2),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7),hwctl,nugget(>=0.95),sqlite3(>=3.15.1)
|
||||
Suggests:
|
||||
Description: An evolving web interface for the Humax.
|
||||
Tags: http://hummy.tv/forum/threads/7619/
|
||||
|
@ -28,15 +28,16 @@ foreach file [cgi_get files] {
|
||||
if {$ts eq "0"} continue
|
||||
|
||||
if {$act eq "mp2"} {
|
||||
set q [queue insert $ts mp3]
|
||||
set q [queue insert -hold $ts mp3]
|
||||
} else {
|
||||
set q [queue insert $ts $act]
|
||||
set q [queue insert -hold $ts $act]
|
||||
}
|
||||
|
||||
switch -- $act {
|
||||
mp2 { $q set args "-mp2" }
|
||||
mp3 { $q set args "-mp3" }
|
||||
}
|
||||
$q submit
|
||||
puts "</li>"
|
||||
}
|
||||
puts "</ul>"
|
||||
|
@ -403,6 +403,7 @@ function flagdir(file, flag, iconset, output, options)
|
||||
.empty()
|
||||
.html('<img src=/img/loading.gif> Updating...')
|
||||
.load('/browse/iconset.jim', { file: file });
|
||||
flag = flag.toLowerCase();
|
||||
if ($(options).attr(flag) == '1')
|
||||
$(options).attr(flag, 0);
|
||||
else
|
||||
@ -682,7 +683,7 @@ var dmenuclick = function(action, el, pos)
|
||||
break;
|
||||
|
||||
case 'shrinkr':
|
||||
flagdir(file, 'autoshrinkr', iconset, results, el);
|
||||
flagdir(file, 'autoshrinkR', iconset, results, el);
|
||||
break;
|
||||
|
||||
case 'decrypt':
|
||||
@ -690,7 +691,7 @@ var dmenuclick = function(action, el, pos)
|
||||
break;
|
||||
|
||||
case 'decryptr':
|
||||
flagdir(file, 'autodecryptr', iconset, results, el);
|
||||
flagdir(file, 'autodecryptR', iconset, results, el);
|
||||
break;
|
||||
|
||||
case 'resetnew':
|
||||
|
@ -24,6 +24,12 @@ foreach q [queue all] {
|
||||
} [$q get file]]
|
||||
set submitted [clock format [$q get submitted] \
|
||||
-format {%d/%m/%Y %H:%M:%S}]
|
||||
if {[$q get last] ne "0"} {
|
||||
set last [clock format [$q get last] \
|
||||
-format {%d/%m/%Y %H:%M:%S}]
|
||||
} else {
|
||||
set last ""
|
||||
}
|
||||
|
||||
set start [$q get start]
|
||||
if {$start ne "0"} { set start $($start - [clock seconds]) }
|
||||
@ -32,6 +38,7 @@ foreach q [queue all] {
|
||||
puts "{"
|
||||
puts " \"qid\": [$q get id],"
|
||||
puts " \"submitted\": \"$submitted\","
|
||||
puts " \"last\": \"$last\","
|
||||
puts " \"file\": \"[::json::escape $name]\","
|
||||
puts " \"action\": \"[::json::escape [$q get action]]\","
|
||||
puts " \"args\": \"[::json::escape [$q get args]]\","
|
||||
|
@ -33,8 +33,9 @@ There are no tasks in the queue.
|
||||
<th>File</th>
|
||||
<th>Action</th>
|
||||
<th>Status</th>
|
||||
<th>Time</th>
|
||||
<th>Runtime</th>
|
||||
<th>Log</th>
|
||||
<th>Last Update</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -38,6 +38,7 @@ function load()
|
||||
s += v.runtime;
|
||||
s += '</td>' +
|
||||
'<td>' + v.log + '</td>' +
|
||||
'<td>' + v.last + '</td>' +
|
||||
'</tr>';
|
||||
|
||||
$('#queuetab > tbody').append(s);
|
||||
|
@ -33,10 +33,10 @@ if {[llength $errfields]} {
|
||||
set r [rsv manual $start $end $lcn $type $repeat $title]
|
||||
} msg]} {
|
||||
puts "\"status\": 0,"
|
||||
puts "\"err\": \"$msg\""
|
||||
puts "\"err\": \"c: $msg\""
|
||||
} elseif {[catch {$r insert} msg]} {
|
||||
puts "\"status\": 0,"
|
||||
puts "\"err\": \"$msg\""
|
||||
puts "\"err\": \"i: $msg\""
|
||||
} else {
|
||||
puts "\"status\": 1"
|
||||
system restartpending
|
||||
|
@ -40,6 +40,14 @@ Plugins register themselves with:
|
||||
|
||||
If not specified, priority defaults to 500.
|
||||
|
||||
Plugins should use directory flags of the form .auto<flag>[R] with the
|
||||
optional trailing R indicating recursion. If they use filesystem flags
|
||||
that don't conform to this scheme then they should register them with:
|
||||
|
||||
::auto::register_flag <module> <flag>
|
||||
|
||||
(e.g. ::auto::register_flag sweeper sweeper)
|
||||
|
||||
The framework will call the following callbacks (if defined within the module):
|
||||
|
||||
::module::init
|
||||
@ -86,7 +94,7 @@ The following functions are available for modules to use:
|
||||
|
||||
Check if a recording is in use (with retries).
|
||||
|
||||
::auto::autoflagscan <root> <flag> <callback>
|
||||
::auto::flagscan <root> <flag> <callback>
|
||||
|
||||
Starting at the directory indicated by <root>, all directories are
|
||||
recursively scanned looking for those containing a file named
|
||||
@ -102,18 +110,6 @@ The following functions are available for modules to use:
|
||||
If the callback returns the string "STOP" then the directory
|
||||
scan stops.
|
||||
|
||||
::auto::flagscan <root> <fiag> <callback>
|
||||
|
||||
Starting at the directory indicated by <root>, all directories are
|
||||
recursively scanned looking for those containing a file named
|
||||
".<flag>".
|
||||
|
||||
The callback will be called once for each flagged directory with
|
||||
the directory name passed as the sole argument.
|
||||
|
||||
If the callback returns the string "STOP" then the directory
|
||||
scan stops.
|
||||
|
||||
::auto::direntries <directory> <callback>
|
||||
|
||||
Scan the named directory and call the callback for each loadable
|
||||
|
@ -15,7 +15,7 @@ set ::auto::force 0
|
||||
while {[llength $argv]} {
|
||||
switch -- [lindex $argv 0] {
|
||||
-d {
|
||||
set ::auto::loglevel 2
|
||||
incr ::auto::loglevel
|
||||
set ::auto::logfd stdout
|
||||
}
|
||||
-f {
|
||||
@ -151,9 +151,12 @@ proc ::auto::pending {} {
|
||||
}] [queue pending]]
|
||||
}
|
||||
|
||||
set ::auto::processed 0
|
||||
for {set qq [::auto::pending]} {[llength $qq]} {set qq [::auto::pending]} {
|
||||
::auto::dumpq $qq
|
||||
|
||||
incr ::auto::processed
|
||||
|
||||
# Try to run the first item in the queue.
|
||||
set q [lindex $qq 0]
|
||||
set plugin [$q get action]
|
||||
@ -169,7 +172,7 @@ for {set qq [::auto::pending]} {[llength $qq]} {set qq [::auto::pending]} {
|
||||
::auto::dsc
|
||||
::auto::oktorun
|
||||
|
||||
$q update RUNNING "Started at [::auto::date]"
|
||||
$q update RUNNING "Started"
|
||||
|
||||
set ologprefix $::auto::logprefix
|
||||
set ::auto::logprefix "$plugin:$::auto::logprefix"
|
||||
@ -184,11 +187,11 @@ for {set qq [::auto::pending]} {[llength $qq]} {set qq [::auto::pending]} {
|
||||
::auto::log " $code - $msg - $next" 0
|
||||
switch -- $code {
|
||||
"-1" {
|
||||
::auto::log " Plugin failure." 0
|
||||
::auto::log " Plugin failure" 0
|
||||
$q update "FAILED" "Plugin failure" 1
|
||||
}
|
||||
"OK" {
|
||||
$q update "COMPLETE" "$msg ([::auto::date])" 1 $elapsed
|
||||
$q update "COMPLETE" $msg 1 $elapsed
|
||||
::auto::runplugins dequeued $plugin $q $ts
|
||||
}
|
||||
"DEFER" {
|
||||
@ -197,7 +200,7 @@ for {set qq [::auto::pending]} {[llength $qq]} {set qq [::auto::pending]} {
|
||||
}
|
||||
"FAILED" { $q update "FAILED" $msg 1 $elapsed }
|
||||
default {
|
||||
$q update "FAILED" "Unknown response '$code' from plugin"
|
||||
$q update "FAILED" "Unknown response '$code'"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -207,5 +210,10 @@ for {set qq [::auto::pending]} {[llength $qq]} {set qq [::auto::pending]} {
|
||||
|
||||
release_lock webif_autodeq
|
||||
|
||||
::auto::log "Auto de-queue completed in [::auto::elapsed $scanstart] seconds."
|
||||
if {$::auto::processed || $::auto::loglevel > 1} {
|
||||
set q "s"
|
||||
if {$::auto::processed == 1} { set q "" }
|
||||
::auto::log "Auto de-queue processed $::auto::processed item$q in [\
|
||||
::auto::elapsed $scanstart] seconds."
|
||||
}
|
||||
|
||||
|
@ -32,21 +32,15 @@ proc ::decrypt::ts {ts} {
|
||||
}
|
||||
|
||||
proc ::decrypt::directory {dir} {
|
||||
::auto::log "DECRYPT: \[$dir]" 2
|
||||
::auto::direntries $dir ::decrypt::ts
|
||||
}
|
||||
|
||||
proc ::decrypt::rundir {dir} {
|
||||
set sup [::auto::autoflagscanup $dir decrypt]
|
||||
if {$sup == -1} {
|
||||
log "Encountered special directory." 2
|
||||
return
|
||||
}
|
||||
::auto::autoflagscan $dir decrypt ::decrypt::directory 0 $sup
|
||||
::auto::flagscan $dir decrypt ::decrypt::directory 0
|
||||
}
|
||||
|
||||
proc ::decrypt::run {} {
|
||||
::auto::autoflagscan $::auto::root decrypt ::decrypt::directory
|
||||
::auto::flagscan $::auto::root decrypt ::decrypt::directory
|
||||
}
|
||||
|
||||
::auto::register decrypt 600
|
||||
|
@ -2,7 +2,6 @@
|
||||
proc ::dedup::directory {dir} {
|
||||
namespace import ::auto::log
|
||||
|
||||
log "DEDUP: \[$dir]" 2
|
||||
loop i 0 1 {
|
||||
foreach line [split \
|
||||
[exec /mod/webif/html/dedup/dedup -yes -auto $dir] "\n"] {
|
||||
@ -13,16 +12,11 @@ proc ::dedup::directory {dir} {
|
||||
}
|
||||
|
||||
proc ::dedup::rundir {dir} {
|
||||
set sup [::auto::autoflagscanup $dir dedup]
|
||||
if {$sup == -1} {
|
||||
log "Encountered special directory." 2
|
||||
return
|
||||
}
|
||||
::auto::autoflagscan $dir dedup ::dedup::directory 0 $sup
|
||||
::auto::flagscan $dir dedup ::dedup::directory 0
|
||||
}
|
||||
|
||||
proc ::dedup::run {} {
|
||||
::auto::autoflagscan $::auto::root dedup ::dedup::directory
|
||||
::auto::flagscan $::auto::root dedup ::dedup::directory
|
||||
}
|
||||
|
||||
::auto::register dedup 800
|
||||
|
@ -2,8 +2,6 @@
|
||||
proc ::expire::directory {dir} {
|
||||
namespace import ::auto::log
|
||||
|
||||
log "EXPIRE: \[$dir]" 2
|
||||
|
||||
# type 0 keep {} days 2 keepnew 0
|
||||
set ax [dir expiry $dir]
|
||||
log " $ax" 2
|
||||
@ -74,16 +72,11 @@ proc ::expire::directory {dir} {
|
||||
}
|
||||
|
||||
proc ::expire::rundir {dir} {
|
||||
set sup [::auto::autoflagscanup $dir expire]
|
||||
if {$sup == -1} {
|
||||
log "Encountered special directory." 2
|
||||
return
|
||||
}
|
||||
::auto::autoflagscan $dir expire ::expire::directory 0 $sup
|
||||
::auto::flagscan $dir expire ::expire::directory 0
|
||||
}
|
||||
|
||||
proc ::expire::run {} {
|
||||
::auto::autoflagscan $::auto::root expire ::expire::directory
|
||||
::auto::flagscan $::auto::root expire ::expire::directory
|
||||
}
|
||||
|
||||
::auto::register expire 900
|
||||
|
@ -24,27 +24,20 @@ proc ::mp3::ts {ts} {
|
||||
}
|
||||
|
||||
# Enqueue file
|
||||
set q [queue insert $ts mp3]
|
||||
#$q set args "-mp2"
|
||||
queue insert $ts mp3
|
||||
::auto::log " $file - Queued for mp3." 0
|
||||
}
|
||||
|
||||
proc ::mp3::directory {dir} {
|
||||
::auto::log "MP3: \[$dir]" 2
|
||||
::auto::direntries $dir ::mp3::ts
|
||||
}
|
||||
|
||||
proc ::mp3::rundir {dir} {
|
||||
set sup [::auto::autoflagscanup $dir mp3]
|
||||
if {$sup == -1} {
|
||||
log "Encountered special directory." 2
|
||||
return
|
||||
}
|
||||
::auto::autoflagscan $dir mp3 ::mp3::directory 0 $sup
|
||||
::auto::flagscan $dir mp3 ::mp3::directory 0
|
||||
}
|
||||
|
||||
proc ::mp3::run {} {
|
||||
::auto::autoflagscan $::auto::root mp3 ::mp3::directory
|
||||
::auto::flagscan $::auto::root mp3 ::mp3::directory
|
||||
}
|
||||
|
||||
::auto::register mp3 300
|
||||
|
@ -29,21 +29,15 @@ proc ::mpg::ts {ts} {
|
||||
}
|
||||
|
||||
proc ::mpg::directory {dir} {
|
||||
::auto::log "MPG: \[$dir]" 2
|
||||
::auto::direntries $dir ::mpg::ts
|
||||
}
|
||||
|
||||
proc ::mpg::rundir {dir} {
|
||||
set sup [::auto::autoflagscanup $dir mpg]
|
||||
if {$sup == -1} {
|
||||
log "Encountered special directory." 2
|
||||
return
|
||||
}
|
||||
::auto::autoflagscan $dir mpg ::mpg::directory 0 $sup
|
||||
::auto::flagscan $dir mpg ::mpg::directory 0
|
||||
}
|
||||
|
||||
proc ::mpg::run {} {
|
||||
::auto::autoflagscan $::auto::root mpg ::mpg::directory
|
||||
::auto::flagscan $::auto::root mpg ::mpg::directory
|
||||
}
|
||||
|
||||
::auto::register mpg 300
|
||||
|
@ -41,21 +41,15 @@ proc ::shrink::ts {ts} {
|
||||
}
|
||||
|
||||
proc ::shrink::directory {dir} {
|
||||
::auto::log "SHRINK: \[$dir]" 2
|
||||
::auto::direntries $dir ::shrink::ts
|
||||
}
|
||||
|
||||
proc ::shrink::rundir {dir} {
|
||||
set sup [::auto::autoflagscanup $dir shrink]
|
||||
if {$sup == -1} {
|
||||
log "Encountered special directory." 2
|
||||
return
|
||||
}
|
||||
::auto::autoflagscan $dir shrink ::shrink::directory 0 $sup
|
||||
::auto::flagscan $dir shrink ::shrink::directory 0
|
||||
}
|
||||
|
||||
proc ::shrink::run {} {
|
||||
::auto::autoflagscan $::auto::root shrink ::shrink::directory
|
||||
::auto::flagscan $::auto::root shrink ::shrink::directory
|
||||
}
|
||||
|
||||
::auto::register shrink 400
|
||||
|
@ -17,7 +17,7 @@ set ::auto::force 0
|
||||
while {[llength $argv]} {
|
||||
switch -- [lindex $argv 0] {
|
||||
-d {
|
||||
set ::auto::loglevel 2
|
||||
incr ::auto::loglevel
|
||||
set ::auto::logfd stdout
|
||||
}
|
||||
-f {
|
||||
@ -71,7 +71,8 @@ if {!$::auto::force} {
|
||||
set autofreq [$::auto::settings autofreq]
|
||||
if {$autofreq == 0} { set autofreq 10 }
|
||||
|
||||
set timesincelast $(([clock seconds] - [$::auto::settings autolast]) / 60)
|
||||
set timesincelast $(([clock seconds] - [$::auto::settings autolast]) \
|
||||
/ 60)
|
||||
if {$timesincelast < $autofreq} {
|
||||
::auto::log "Aborting, not yet time to run." 2
|
||||
::auto::log " elapsed (minutes): $timesincelast (<$autofreq)" 2
|
||||
@ -108,6 +109,93 @@ set ::auto::rootdev $rootstat(dev)
|
||||
#########################################################################
|
||||
# Utility functions
|
||||
|
||||
set ::auto::flagdb {}
|
||||
set ::auto::activeflags {}
|
||||
set ::auto::extraflags {}
|
||||
|
||||
proc ::auto::buildflagdb {dir {active {}}} {{seen {}} {indent 0}} {
|
||||
variable flagdb
|
||||
variable activeflags
|
||||
variable extraflags
|
||||
variable dustbin
|
||||
variable rootdev
|
||||
|
||||
incr indent 2
|
||||
log "[string repeat " " $indent]\[$dir]" 3
|
||||
|
||||
if {$dir eq $dustbin} {
|
||||
log "[string repeat " " $indent]Dustbin, skipping." 3
|
||||
incr indent -2
|
||||
return
|
||||
}
|
||||
|
||||
file stat "$dir/" st
|
||||
|
||||
if {[specialdir $dir]} {
|
||||
# Special folder
|
||||
if {$st(dev) != $rootdev} {
|
||||
log "[string repeat " " $indent\
|
||||
]Special folder on different device, skipping." 3
|
||||
incr indent -2
|
||||
return
|
||||
}
|
||||
if {[llength $active]} {
|
||||
set active {}
|
||||
log "[string repeat " " $indent\
|
||||
]Special folder, overriding recursion." 3
|
||||
}
|
||||
}
|
||||
|
||||
# Already seen
|
||||
set key "$st(dev):$st(ino)"
|
||||
if {$key in $seen} {
|
||||
log "[string repeat " " $indent]Already seen, skipping." 3
|
||||
incr indent -2
|
||||
return
|
||||
}
|
||||
lappend seen $key
|
||||
|
||||
set flags [lmap i \
|
||||
[glob -nocomplain -directory $dir -tails ".auto*"] \
|
||||
{ string range $i 5 end }]
|
||||
|
||||
foreach x $extraflags {
|
||||
foreach f [lmap i \
|
||||
[glob -nocomplain -directory $dir -tails ".$x"] \
|
||||
{ string range $i 1 end }] {
|
||||
ladd flags $f
|
||||
}
|
||||
}
|
||||
|
||||
foreach f $flags {
|
||||
# If recursive flag found, add to active set.
|
||||
if {[string index $f end] eq "R"} {
|
||||
ladd active [string range $f 0 end-1]
|
||||
}
|
||||
}
|
||||
|
||||
# Add any active flags to the set.
|
||||
foreach f $active {
|
||||
ladd flags $f
|
||||
}
|
||||
|
||||
if {[llength $flags]} {
|
||||
lappend flagdb $dir $flags
|
||||
log "[string repeat " " $indent] $flags" 3
|
||||
foreach f $flags { ladd activeflags $f }
|
||||
}
|
||||
|
||||
foreach entry [readdir -nocomplain $dir] {
|
||||
if {[file isdirectory "$dir/$entry"]} {
|
||||
buildflagdb "$dir/$entry" $active
|
||||
}
|
||||
}
|
||||
|
||||
set active {}
|
||||
|
||||
incr indent -2
|
||||
}
|
||||
|
||||
set ::auto::recalcdirs {}
|
||||
|
||||
proc ::auto::recalcdir {dir} {
|
||||
@ -124,120 +212,39 @@ proc ::auto::direntries {dir callback} {
|
||||
}
|
||||
}
|
||||
|
||||
proc ::auto::autoflagscan {dir attr callback {recurse 1} {force 0} {seen {}}} \
|
||||
{{indent 0} {forceflag ""}} {
|
||||
variable dustbin
|
||||
variable rootdev
|
||||
proc ::auto::flagscan {root flag callback {recurse 1}} {
|
||||
variable flagdb
|
||||
variable activeflags
|
||||
|
||||
incr indent 2
|
||||
|
||||
log "[string repeat " " $indent]\[$dir]" 2
|
||||
|
||||
if {$dir eq $dustbin} {
|
||||
log "[string repeat " " $indent]Dustbin, skipping." 2
|
||||
incr indent -2
|
||||
if {$flag ni $activeflags} {
|
||||
log "No $flag flags in filesystem, suppressing scan."
|
||||
return
|
||||
}
|
||||
|
||||
file stat "$dir/" st
|
||||
|
||||
if {[specialdir $dir]} {
|
||||
# Special folder
|
||||
if {$st(dev) != $rootdev} {
|
||||
log "[string repeat " " $indent\
|
||||
]Special folder on different device, skipping." 2
|
||||
incr indent -2
|
||||
return
|
||||
if {!$recurse} {
|
||||
# Just this exact directory
|
||||
if {[dict exists $flagdb $root] && $flag in $flagdb($root)} {
|
||||
log "[string toupper $flag]: \[$root]" 2
|
||||
$callback $root
|
||||
}
|
||||
if {$force} {
|
||||
set force 0
|
||||
set forceflag ""
|
||||
log "[string repeat " " $indent\
|
||||
]Special folder, overriding recursion." 2
|
||||
}
|
||||
}
|
||||
|
||||
# Already seen
|
||||
set key "$st(dev):$st(ino)"
|
||||
if {$key in $seen} {
|
||||
log "[string repeat " " $indent]Already seen, skipping." 2
|
||||
incr indent -2
|
||||
return
|
||||
}
|
||||
lappend seen $key
|
||||
|
||||
# Recursion
|
||||
if {!$force && [file exists "$dir/.auto${attr}r"]} {
|
||||
log "[string repeat " " $indent] (R)" 2
|
||||
set force 1
|
||||
set forceflag "$dir/.auto${attr}r"
|
||||
}
|
||||
set rootl [string length $root]
|
||||
|
||||
oktorun
|
||||
dsc
|
||||
|
||||
if {$force || [file exists "$dir/.auto$attr"]} {
|
||||
if {[$callback $dir] eq "STOP"} {
|
||||
log "[string repeat " " $indent\
|
||||
]Callback returned STOP." 2
|
||||
incr indent -2
|
||||
return "STOP"
|
||||
}
|
||||
}
|
||||
|
||||
foreach entry [readdir -nocomplain $dir] {
|
||||
if {$recurse && [file isdirectory "$dir/$entry"]} {
|
||||
if {[autoflagscan "$dir/$entry" \
|
||||
$attr $callback $recurse $force \
|
||||
$seen] eq "STOP"} {
|
||||
incr indent -2
|
||||
return "STOP"
|
||||
}
|
||||
file stat "$dir/$entry" st
|
||||
set key "$st(dev):$st(ino)"
|
||||
lappend seen $key
|
||||
}
|
||||
}
|
||||
|
||||
incr indent -2
|
||||
}
|
||||
|
||||
proc ::auto::flagscan {dir flag callback {seen {}}} {
|
||||
variable dustbin
|
||||
|
||||
if {$dir eq $dustbin} return
|
||||
|
||||
if {[specialdir $dir]} return
|
||||
|
||||
file stat $dir st
|
||||
set key "$st(dev):$st(ino)"
|
||||
if {$key in $seen} {
|
||||
log "Already seen $dir ($key)" 2
|
||||
return
|
||||
}
|
||||
lappend seen $key
|
||||
|
||||
if {[file exists "$dir/.$flag"]} {
|
||||
if {[$callback $dir] eq "STOP"} {
|
||||
log "Callback returned STOP." 2
|
||||
return "STOP"
|
||||
}
|
||||
}
|
||||
|
||||
foreach entry [readdir -nocomplain $dir] {
|
||||
if {[file isdirectory "$dir/$entry"]} {
|
||||
if {[flagscan "$dir/$entry" $flag $callback $seen]
|
||||
eq "STOP"} {
|
||||
return "STOP"
|
||||
}
|
||||
|
||||
file stat "$dir/$entry" st
|
||||
set key "$st(dev):$st(ino)"
|
||||
lappend seen $key
|
||||
foreach {dir flags} $flagdb {
|
||||
if {![string equal -length $rootl $dir $root]} continue
|
||||
if {$flag in $flags} {
|
||||
oktorun
|
||||
dsc
|
||||
log "[string toupper $flag]: \[$dir]" 2
|
||||
if {[$callback $dir] eq "STOP"} break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
alias ::auto::autoflagscan ::auto::flagscan
|
||||
|
||||
######################################################################
|
||||
# Plugin registration
|
||||
|
||||
@ -251,6 +258,12 @@ proc ::auto::register {plugin {priority 500} {fn ""}} {
|
||||
log "Registered $plugin with priority $priority ($fn)" 2
|
||||
}
|
||||
|
||||
proc ::auto::register_flag {plugin flag} {
|
||||
variable extraflags
|
||||
ladd extraflags $flag
|
||||
log "Registered flag '$flag' for $plugin" 2
|
||||
}
|
||||
|
||||
# Backwards compatibility with legacy plugins
|
||||
set ::auto::legacy {}
|
||||
proc register {type fn {priority 50}} {
|
||||
@ -312,6 +325,20 @@ if {[llength $::auto::legacy]} {
|
||||
alias scanup ::auto::autoflagscanup
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# Run media flag database
|
||||
|
||||
::auto::log "Scanning media for flags..."
|
||||
set st [clock milliseconds]
|
||||
::auto::buildflagdb $::auto::root
|
||||
::auto::log "Scan completed ([::auto::elapsed $st] seconds)"
|
||||
::auto::log "Active flags: $::auto::activeflags"
|
||||
if {$::auto::loglevel > 1} {
|
||||
foreach {dir flags} $::auto::flagdb {
|
||||
::auto::log "[format %-80s $dir] - $flags" 2
|
||||
}
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# Run plugins
|
||||
|
||||
|
@ -1,20 +1,55 @@
|
||||
#!/mod/bin/jimsh
|
||||
|
||||
source /mod/webif/lib/setup
|
||||
require queue.class
|
||||
require queue.class system.class
|
||||
|
||||
switch -- [queue version] {
|
||||
1 {
|
||||
puts "Clearing queue due to version change..."
|
||||
queue dbhandle -close
|
||||
file delete /mod/etc/queue.db
|
||||
queue dbhandle
|
||||
}
|
||||
2 {
|
||||
puts "Queue version is up-to-date."
|
||||
}
|
||||
default {
|
||||
puts "Unknown queue version."
|
||||
proc fixflags {dir} {
|
||||
puts "Upgrading directory flags..."
|
||||
foreach entry [readdir -nocomplain $dir] {
|
||||
if {[file isdirectory "$dir/$entry"]} {
|
||||
fixflags "$dir/$entry"
|
||||
continue
|
||||
}
|
||||
if {[string match {.auto*r} $entry]} {
|
||||
puts "Updating flag $dir/$entry"
|
||||
file rename "$dir/$entry" \
|
||||
"$dir/[string range $entry 0 end-1]R"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set queries {
|
||||
2 { {alter table queue add column last integer} }
|
||||
}
|
||||
|
||||
set latest 3
|
||||
set cur [queue version]
|
||||
|
||||
if {$cur == $latest} {
|
||||
puts "Queue database is up-to-date."
|
||||
exit
|
||||
}
|
||||
|
||||
if {$cur < 3} { fixflags [system mediaroot] }
|
||||
|
||||
if {$cur < 2} {
|
||||
puts "Clearing queue due to version change..."
|
||||
queue dbhandle -close
|
||||
file delete /mod/etc/queue.db
|
||||
queue dbhandle
|
||||
set cur $latest
|
||||
}
|
||||
|
||||
set db [queue dbhandle]
|
||||
loop i $cur $latest {
|
||||
puts "Upgrading queue database to version $($i + 1)"
|
||||
foreach q $queries($i) {
|
||||
catch { $db query $q }
|
||||
$db query {
|
||||
update config
|
||||
set val = %s
|
||||
where var = 'version'
|
||||
} $($i + 1)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ proc {dir iconset} {dir} {
|
||||
set attrs {}
|
||||
|
||||
set autoshrinkr 0
|
||||
if {[file exists "$dir/.autoshrinkr"]} {
|
||||
if {[file exists "$dir/.autoshrinkR"]} {
|
||||
set autoshrinkr 1
|
||||
lappend icons [_addicon "/img/compressr.png" \
|
||||
"Recursive Auto-shrink"]
|
||||
@ -58,7 +58,7 @@ proc {dir iconset} {dir} {
|
||||
}
|
||||
|
||||
set autodecryptr 0
|
||||
if {[file exists "$dir/.autodecryptr"]} {
|
||||
if {[file exists "$dir/.autodecryptR"]} {
|
||||
set autodecryptr 1
|
||||
lappend icons [_addicon "/img/decryptr.png" \
|
||||
"Recursive Auto-decrypt"]
|
||||
|
@ -14,6 +14,7 @@ class queue {
|
||||
retries 0
|
||||
interrupts 0
|
||||
submitted 0
|
||||
last 0
|
||||
}
|
||||
|
||||
# Queue status values:
|
||||
@ -52,7 +53,8 @@ proc {queue dbhandle} {args} {
|
||||
runtime integer,
|
||||
retries integer default 0,
|
||||
interrupts integer default 0,
|
||||
submitted integer
|
||||
submitted integer,
|
||||
last integer
|
||||
);
|
||||
}
|
||||
$::queue::db query {
|
||||
@ -62,7 +64,7 @@ proc {queue dbhandle} {args} {
|
||||
);
|
||||
}
|
||||
$::queue::db query {
|
||||
insert into config values('version', 2);
|
||||
insert into config values('version', 3);
|
||||
}
|
||||
$::queue::db query {
|
||||
create unique index file on queue(file, action);
|
||||
@ -117,13 +119,16 @@ proc {queue fetch} {file action} {
|
||||
return {}
|
||||
}
|
||||
|
||||
proc {queue insert} {ts action} {
|
||||
proc {queue insert} {args ts action} {
|
||||
set db [queue dbhandle]
|
||||
|
||||
set status "PENDING"
|
||||
if {"-hold" in $args} { set status "HOLD" }
|
||||
|
||||
$db query {
|
||||
insert or ignore into queue(submitted, file, action)
|
||||
values(%s, '%s', '%s')
|
||||
} [clock seconds] [file normalize [$ts get file]] $action
|
||||
insert or ignore into queue(submitted, file, action, status)
|
||||
values(%s, '%s', '%s', '%s')
|
||||
} [clock seconds] [file normalize [$ts get file]] $action $status
|
||||
|
||||
return [queue fetch [$ts get file] $action]
|
||||
}
|
||||
@ -259,9 +264,10 @@ queue method update {_status {_log ""} {_retries 0} {_runtime 0}} {
|
||||
set status = '%s',
|
||||
log = '%s',
|
||||
retries = retries + %s,
|
||||
runtime = %s
|
||||
runtime = %s,
|
||||
last = %s
|
||||
where id = %s
|
||||
} $_status $_log $_retries $_runtime $id
|
||||
} $_status $_log $_retries $_runtime [clock seconds] $id
|
||||
|
||||
set status $_status
|
||||
set log $_log
|
||||
@ -279,3 +285,8 @@ queue method set {var val} {
|
||||
set $var $val
|
||||
}
|
||||
|
||||
queue method submit {{_start 0}} {
|
||||
if {$_start} { $self set start $_start }
|
||||
queue resubmit $id
|
||||
}
|
||||
|
||||
|
@ -410,7 +410,7 @@ rsv method insert {{table pending} {force 0} {defer 0}} {
|
||||
}
|
||||
|
||||
# Duplicate check - all tables
|
||||
if {!$force && $action == 0} {
|
||||
if {!$force && $action == 0 && $usevtid} {
|
||||
foreach tab {pending TBL_RESERVATION} {
|
||||
set rec [$rsvdb query "
|
||||
select ulslot from $tab
|
||||
|
@ -70,7 +70,7 @@ tvdb method _fetch {url} {
|
||||
return $ret
|
||||
}
|
||||
|
||||
tvdb method _parse {xml vars {end "XXX"}} {
|
||||
tvdb method _parse {xml vars {end "XX"}} {
|
||||
set x [xml init $xml]
|
||||
set cattr 0
|
||||
while {1} {
|
||||
|
Loading…
Reference in New Issue
Block a user