diff --git a/source/net/sourceforge/filebot/cli/ScriptShell.lib.groovy b/source/net/sourceforge/filebot/cli/ScriptShell.lib.groovy index 173d33ff..77ec0d36 100644 --- a/source/net/sourceforge/filebot/cli/ScriptShell.lib.groovy +++ b/source/net/sourceforge/filebot/cli/ScriptShell.lib.groovy @@ -1,5 +1,6 @@ // File selector methods import static groovy.io.FileType.* +import static groovy.io.FileVisitResult.* // MediaDetection import net.sourceforge.filebot.media.* @@ -27,9 +28,10 @@ String.metaClass.getFolders = { c -> new File(delegate).getFolders(c) } File.metaClass.getFolders = { c -> def folders = []; traverse(type:DIRECTORIES, visitRoot:true) { folders += it }; return c ? folders.findAll(c).sort() : folders.sort() } List.metaClass.getFolders = { c -> findResults{ it.getFolders(c) }.flatten().unique() } +File.metaClass.getMediaFolders = { def folders = []; traverse(type:DIRECTORIES, visitRoot:true, preDir:{ it.isDisk() ? SKIP_SUBTREE : CONTINUE }) { folders += it }; folders.findAll{ it.hasFile{ it.isVideo() } || it.isDisk() }.sort() } String.metaClass.eachMediaFolder = { c -> new File(delegate).eachMediaFolder(c) } -File.metaClass.eachMediaFolder = { c -> getFolders{ it.hasFile{ it.isVideo() } }.each(c) } -List.metaClass.eachMediaFolder = { c -> getFolders{ it.hasFile{ it.isVideo() } }.each(c) } +File.metaClass.eachMediaFolder = { c -> delegate.getMediaFolders().each(c) } +List.metaClass.eachMediaFolder = { c -> delegate.findResults{ it.getMediaFolders() }.flatten().unique().each(c) } // File utility methods diff --git a/source/net/sourceforge/tuned/FileUtilities.java b/source/net/sourceforge/tuned/FileUtilities.java index 79c5b35d..572fe0ce 100644 --- a/source/net/sourceforge/tuned/FileUtilities.java +++ b/source/net/sourceforge/tuned/FileUtilities.java @@ -306,12 +306,14 @@ public final class FileUtilities { } - public static boolean containsOnly(Iterable files, FileFilter filter) { + public static boolean containsOnly(Collection files, FileFilter filter) { + if (files.isEmpty()) { + return false; + } for (File file : files) { if (!filter.accept(file)) return false; } - return true; } diff --git a/website/scripts/renall.groovy b/website/scripts/renall.groovy index 6228ef6f..2fb1b8f1 100644 --- a/website/scripts/renall.groovy +++ b/website/scripts/renall.groovy @@ -6,8 +6,11 @@ def target = tryQuietly{ target } ?: 'file' // target files by default args.eachMediaFolder { + if (it.isDisk()) + return rename(file:it) // rename disk folders instead of files regardless of mode + switch(target) { case 'file' : return rename(folder:it) // rename files within each folder - case 'folder' : return rename(file :it) // rename folders as if they were files + case 'folder' : return rename(file:it) // rename folders as if they were files } }