From f717c85921e254e997144d7ae5acf641f51fff39 Mon Sep 17 00:00:00 2001 From: hummypkg Date: Mon, 7 Sep 2015 21:30:22 +0000 Subject: [PATCH] adding flag/unflag/fileexists/%asfilename... --- CONTROL/control | 2 +- webif/plugin/sweeper/auto.hook | 74 ++++++++++++++++++++++++++++++++-- webif/plugin/sweeper/schema.js | 28 +++++++++++++ 3 files changed, 99 insertions(+), 5 deletions(-) diff --git a/CONTROL/control b/CONTROL/control index 73d9911..a067adc 100644 --- a/CONTROL/control +++ b/CONTROL/control @@ -1,7 +1,7 @@ Package: sweeper Priority: optional Section: misc -Version: 2.0.10 +Version: 2.0.11 Architecture: mipsel Maintainer: af123@hummypkg.org.uk Depends: webif(>=1.2.4-3) diff --git a/webif/plugin/sweeper/auto.hook b/webif/plugin/sweeper/auto.hook index 5c8062a..bf81f3b 100644 --- a/webif/plugin/sweeper/auto.hook +++ b/webif/plugin/sweeper/auto.hook @@ -2,6 +2,7 @@ set ::sweeper::cf "/mod/etc/sweeper.conf" set ::sweeper::dryrun 0 set ::sweeper::lastruleresult 0 +set ::sweeper::stack {} proc ::sweeper::unknown {cmd args} { log "Unknown sweeper rule clause '$cmd'" 0 @@ -36,6 +37,7 @@ proc ::sweeper::strcontains {ref val} { set ::sweeper::expand_fns { replace {2} regsub {2} + asfilename {1 {inline}} } proc ::sweeper::expand_replace {ts &ret search replace} { @@ -50,6 +52,12 @@ proc ::sweeper::expand_regsub {ts &ret search replace} { } } +proc ::sweeper::expand_asfilename {ts &ret arg} { + return [system filename $arg] +} + +set ::sweeper::brmap "( ) \[ ] \\{ \\}" + # Expand a string containing tokens proc ::sweeper::expand {ts str {orig ""}} { if {[string first "%" $str] == -1} { @@ -88,6 +96,10 @@ proc ::sweeper::expand {ts str {orig ""}} { "%channel" [$ts get channel_name] \ "%duration" [$ts duration] \ \ + "%filename" [$ts get file] \ + "%basename" [$ts bfile] \ + "%folder" [$ts dir] \ + \ %epname [$ts episode_name] \ %series [$ts get seriesnum] \ %episodes [$ts get episodetot] \ @@ -125,7 +137,7 @@ proc ::sweeper::expand {ts str {orig ""}} { foreach {fn params} $::sweeper::expand_fns { # log " Looking for %$fn" 2 - lassign $params numargs + lassign $params numargs flags set li -1 while {[set i [string first "%$fn" $ret]] >= 0} { @@ -136,7 +148,7 @@ proc ::sweeper::expand {ts str {orig ""}} { set chpos $($i + [string length $fn] + 1) set ch [string index $ret $chpos] - log " - found at $i (delim\[$ch])" 2 +# log " - found at $i (delim\[$ch])" 2 # Extract the arguments set pos $chpos @@ -144,6 +156,11 @@ proc ::sweeper::expand {ts str {orig ""}} { while {[llength $fnargs] < $numargs} { incr pos set e [string first $ch $ret $pos] + if {$e == -1 && [ \ + dict exists $::sweeper::brmap $ch]} { + set bch $::sweeper::brmap($ch) + set e [string first $bch $ret $pos] + } if {$e == -1} { log "Error. %$fn - [llength $fnargs]/$numargs parameters found." break @@ -153,11 +170,24 @@ proc ::sweeper::expand {ts str {orig ""}} { set pos $e } - set ret [string replace $ret $i $pos] +# log "FNARGS: ($fnargs)" 2 + if {[llength $fnargs] == $numargs} { log " - Calling expand_$fn\($fnargs)" 2 - ::sweeper::expand_$fn $ts ret {*}$fnargs + set fnret [ + ::sweeper::expand_$fn $ts ret {*}$fnargs] + log " - Result: ($ret) ($fnret)" 2 } + + if {"inline" in $flags} { + set nret [string range $ret 0 $($i - 1)] + append nret $fnret + append nret [string range $ret $($pos + 1) end] + set ret $nret + } else { + set ret [string replace $ret $($i - 1) $pos] + } + log " FN expanded \[$str] -> \[$ret]" 2 } } @@ -428,6 +458,26 @@ proc ::sweeper::foldername {ts str folder} { return [::sweeper::strcontains [$ts dir] $str] } +proc ::sweeper::fileexists {ts str folder} { + if {[string index $str 0] ne "/"} { + set str "[$ts dir]/[::sweeper::expand $ts $str]" + } else { + set str [::sweeper::expand $ts $str] + } + log " FILEEXISTS($str)" 2 + return [file isfile $str] +} + +proc ::sweeper::direxists {ts str folder} { + if {[string index $str 0] ne "/"} { + set str "[$ts dir]/[::sweeper::expand $ts $str]" + } else { + set str [::sweeper::expand $ts $str] + } + log " DIREXISTS($str)" 2 + return [file isdirectory $str] +} + proc ::sweeper::series {ts flag folder} { if {!$folder} { return 0 } set dir [$ts dir] @@ -705,6 +755,22 @@ proc ::sweeper::action_delete {ts cmd arg folder} { return 1 } +proc ::sweeper::action_flag {ts cmd arg folder} { + log "Flagged [$ts get file] as $arg" 0 + if {!$::sweeper::dryrun} { + $ts setflag $arg + } + return 0 +} + +proc ::sweeper::action_unflag {ts cmd arg folder} { + log "Unflagged [$ts get file] as $arg" 0 + if {!$::sweeper::dryrun} { + $ts unsetflag $arg + } + return 0 +} + eval_plugins sweeper ###################################################################### diff --git a/webif/plugin/sweeper/schema.js b/webif/plugin/sweeper/schema.js index 5996590..7bc2887 100644 --- a/webif/plugin/sweeper/schema.js +++ b/webif/plugin/sweeper/schema.js @@ -186,6 +186,22 @@ var schema = { negate: true, def: "" }, + fileexists: { + 'class': 'all', + type: 'string', + desc: 'File exists', + idesc: "File does not exist", + negate: true, + def: "" + }, + direxists: { + 'class': 'all', + type: 'string', + desc: 'Directory exists', + idesc: "Directory does not exist", + negate: true, + def: "" + }, textmatch: { 'class': 'all', type: 'textmatch', @@ -297,6 +313,18 @@ var schema = { desc: 'Unlock recordings', continues: true }, + flag: { + 'class': 'all', + argtype: 'string', + desc: 'Set recording flag...', + continues: true + }, + unflag: { + 'class': 'all', + argtype: 'string', + desc: 'Unset recording flag...', + continues: true + }, 'delete': { 'class': 'all', argtype: 'none',