forked from hummypkg/sweeper
1.0.5
This commit is contained in:
parent
ef6139671f
commit
ad72f6ceb1
@ -1,7 +1,7 @@
|
||||
Package: sweeper
|
||||
Priority: optional
|
||||
Section: misc
|
||||
Version: 1.0.4
|
||||
Version: 1.0.5
|
||||
Architecture: mipsel
|
||||
Maintainer: af123@hummypkg.org.uk
|
||||
Depends: webif(>=1.0.5-3)
|
||||
|
@ -68,6 +68,11 @@ proc ::sweeper::duration {ts dur} {
|
||||
return [::sweeper::intcomp [$ts duration] $dur]
|
||||
}
|
||||
|
||||
proc ::sweeper::hour {ts str} {
|
||||
set hour [clock format [$ts get start] -format "%H"]
|
||||
return [::sweeper::intcomp $hour $str]
|
||||
}
|
||||
|
||||
proc ::sweeper::schedduration {ts dur} {
|
||||
return [::sweeper::intcomp [$ts get scheddur] $dur]
|
||||
}
|
||||
@ -102,6 +107,16 @@ proc ::sweeper::genre {ts genre} {
|
||||
return 0
|
||||
}
|
||||
|
||||
proc ::sweeper::lock {ts g} {
|
||||
if {$g} {
|
||||
log "Locked recording." 0
|
||||
$ts lock
|
||||
} else {
|
||||
log "Unlocked recording." 0
|
||||
$ts unlock
|
||||
}
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
proc ::sweeper::action {ts cmds} {
|
||||
@ -139,6 +154,97 @@ proc ::sweeper::action {ts cmds} {
|
||||
}
|
||||
return 1
|
||||
}
|
||||
default {
|
||||
log "Unknown action '$cmd'" 0
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
proc ::sweeper::find {root target orig} {
|
||||
set dustbin [system dustbin 1]
|
||||
foreach e [readdir -nocomplain $root] {
|
||||
regsub -all -- {//} "$root/$e" "/" entry
|
||||
if {![file isdirectory $entry]} continue
|
||||
if {[string match {\[*} $e]} continue
|
||||
if {$e eq $dustbin} continue
|
||||
if {$entry eq $orig} continue
|
||||
|
||||
if {$e eq $target} { return $entry }
|
||||
set ret [::sweeper::find $entry $target $orig]
|
||||
if {$ret ne ""} { return $ret }
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
proc ::sweeper:folder_merge {src dst} {
|
||||
log "Moving recordings from $src to $dst" 0
|
||||
foreach e [readdir -nocomplain $src] {
|
||||
if {![string match {*.ts} $e]} continue
|
||||
set entry "$src/$e"
|
||||
|
||||
if {[catch {set ts [ts fetch $entry]} msg} {
|
||||
log "Error reading TS file, $msg" 0
|
||||
continue
|
||||
}
|
||||
|
||||
if {$ts == "0"} {
|
||||
log "Invalid TS file." 0
|
||||
continue
|
||||
}
|
||||
|
||||
if {[$ts inuse]} {
|
||||
log "Recording in use." 2
|
||||
continue
|
||||
}
|
||||
|
||||
foreach f [$ts fileset] {
|
||||
log " ....... $f"
|
||||
file rename $f "$dst/[file tail $f]"
|
||||
}
|
||||
}
|
||||
file delete "$src/.series"
|
||||
if {[catch {file delete $src} msg]} {
|
||||
log "Failed to remove directory: $msg" 0
|
||||
}
|
||||
if {$dst ni $::sweeper::recalc} {
|
||||
lappend ::sweeper::recalc $dst
|
||||
}
|
||||
}
|
||||
|
||||
proc ::sweeper::folder_action {ts cmds} {
|
||||
global root
|
||||
|
||||
lassign $cmds cmd rest
|
||||
|
||||
set folder [file dirname [$ts get file]]
|
||||
set lfolder [file tail $folder]
|
||||
|
||||
log "FOLDER ACTION: $cmd\($rest) @\[$folder]" 2
|
||||
|
||||
switch $cmd {
|
||||
preserve { return 1 }
|
||||
fileundercreate -
|
||||
fileunder {
|
||||
if {![file isdirectory "$root/$rest"]} {
|
||||
log " ... No such directory $root/$rest" 2
|
||||
return 1
|
||||
}
|
||||
log " - searching for $lfolder under $root/$rest" 2
|
||||
set target [::sweeper::find $root/$rest $lfolder $folder]
|
||||
log " = $target" 2
|
||||
if {$target eq "" || ![file isdirectory $target]} {
|
||||
log "Did not find directory." 2
|
||||
if {$cmd ne "fileundercreate"} { return 1 }
|
||||
log "Creating..." 2
|
||||
set target "$root/$rest/$lfolder"
|
||||
system mkdir_p $target
|
||||
}
|
||||
::sweeper:folder_merge $folder $target
|
||||
}
|
||||
default {
|
||||
log "Unknown action '$cmd'" 0
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
@ -148,10 +254,19 @@ proc ::sweeper::runrule {ts rule} {
|
||||
|
||||
if {[string index $rule 0] eq "#" || [llength $rule] < 2} { return 0 }
|
||||
|
||||
set folder 0
|
||||
if {[lindex $rule 0] eq "folder"} {
|
||||
set folder 1
|
||||
set rule [lrange $rule 1 end]
|
||||
}
|
||||
while {[llength $rule] > 1} {
|
||||
set rule [lassign $rule cmd arg]
|
||||
log " $cmd\($arg)" 2
|
||||
set ret [::sweeper::$cmd $ts $arg]
|
||||
if {$folder && [exists -proc ::sweeper::folder_$cmd]} {
|
||||
set ret [::sweeper::folder_$cmd $ts $arg]
|
||||
} else {
|
||||
set ret [::sweeper::$cmd $ts $arg]
|
||||
}
|
||||
if {$cmd eq "action"} { return $ret }
|
||||
if {!$ret} {
|
||||
log " Nomatch" 2
|
||||
@ -174,6 +289,11 @@ proc ::sweeper::apply {dir cf} {
|
||||
set rules [split [read $fp] "\n"]
|
||||
$fp close
|
||||
|
||||
set runfolder 0
|
||||
foreach rule $rules {
|
||||
if {[lindex $rule 0] eq "folder"} { incr runfolder }
|
||||
}
|
||||
|
||||
log "Sweep scan starting for $dir" 2
|
||||
|
||||
foreach e [readdir -nocomplain $dir] {
|
||||
@ -199,10 +319,76 @@ proc ::sweeper::apply {dir cf} {
|
||||
}
|
||||
|
||||
foreach rule $rules {
|
||||
if {[lindex $rule 0] eq "folder"} continue
|
||||
if {[string index $rule 0] eq "#" || \
|
||||
[llength $rule] < 2} continue
|
||||
if {[::sweeper::runrule $ts $rule]} break
|
||||
}
|
||||
}
|
||||
|
||||
if {$runfolder > 0} {
|
||||
log "" 2
|
||||
log " -- FOLDER RULES --" 2
|
||||
log "" 2
|
||||
set dustbin [system dustbin 1]
|
||||
foreach e [readdir -nocomplain $dir] {
|
||||
set entry "$dir/$e"
|
||||
if {![file isdirectory $entry]} continue
|
||||
if {[string match {\[*} $e]} continue
|
||||
if {$e eq $dustbin} continue
|
||||
|
||||
log "+ Sweeper processing folder $entry" 2
|
||||
|
||||
if {![file exists "$entry/.series"]} {
|
||||
log "Not series folder." 2
|
||||
continue
|
||||
}
|
||||
|
||||
set ts 0
|
||||
foreach de [readdir -nocomplain $entry] {
|
||||
set dentry "$entry/$de"
|
||||
if {[file isdirectory $dentry]} {
|
||||
set ts 0
|
||||
break
|
||||
}
|
||||
if {$ts ne "0"} continue
|
||||
if {![string match {*.ts} $dentry]} continue
|
||||
|
||||
log " --- Considering $dentry" 2
|
||||
|
||||
if {[catch {set ts [ts fetch $dentry]} msg} {
|
||||
log "Error reading TS file, $msg" 2
|
||||
continue
|
||||
}
|
||||
|
||||
if {$ts == "0"} {
|
||||
log "Invalid TS file." 2
|
||||
continue
|
||||
}
|
||||
|
||||
if {[$ts inuse]} {
|
||||
log "Recording in use." 2
|
||||
set ts 0
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if {$ts == "0"} {
|
||||
log "No usable recordings in folder." 2
|
||||
continue
|
||||
}
|
||||
|
||||
foreach rule $rules {
|
||||
if {[string index $rule 0] eq "#" || \
|
||||
[llength $rule] < 2} continue
|
||||
if {[lindex $rule 0] ne "folder"} continue
|
||||
if {[::sweeper::runrule $ts $rule]} break
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
foreach dir $::sweeper::recalc {
|
||||
ts resetnew "$::root/$dir"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user