diff --git a/source/net/sourceforge/filebot/cli/CmdlineOperations.java b/source/net/sourceforge/filebot/cli/CmdlineOperations.java index 0ce8129e..5f30ec4f 100644 --- a/source/net/sourceforge/filebot/cli/CmdlineOperations.java +++ b/source/net/sourceforge/filebot/cli/CmdlineOperations.java @@ -937,7 +937,7 @@ public class CmdlineOperations implements CmdlineInterface { extractedFiles.add(outputMapper.getOutputFile(entry)); } - CLILogger.finest("Extract files " + entries); + CLILogger.finest("Extracting files " + entries); archive.extract(outputMapper); } finally { archive.close(); diff --git a/website/scripts/sorty.groovy b/website/scripts/sorty.groovy index 4fbdb1a5..c8ab8869 100644 --- a/website/scripts/sorty.groovy +++ b/website/scripts/sorty.groovy @@ -10,34 +10,17 @@ def xbmc = ['localhost'] // (use [] to not notify any XBMC instances about updat // ignore chunk, part, par and hidden files -def incomplete(f) { f.name =~ /[.]chunk|[.]part\d{0,3}$|[.]par$|[.]dat$/ || f.isHidden() } +def incomplete(f) { f.name =~ /[.]incomplete|[.]chunk|[.]par$|[.]dat$/ || f.isHidden() } -// run cmdline unrar (require -trust-script) on multi-volume rar files -[episodeDir, movieDir].getFiles().findAll { it =~ /[.]part01[.]rar$/ || (it =~ /[.]rar$/ && !(it =~ /[.]part\d{2}[.]rar$/)) }.each { rar -> - // new layout: foo.part1.rar, foo.part2.rar - // old layout: foo.rar, foo.r00, foo.r01 - boolean partLayout = (rar =~ /[.]part01[.]rar/) +// extract completed multi-volume rar files +[episodeDir, movieDir].getFolders{ !it.hasFile{ incomplete(it) } && it.hasFile{ it =~ /[.]rar$/ } }.each{ dir -> + // extract all archives found in this folder + def paths = extract(folder:dir) - // extract name from name.part01.rar or name.rar - def name = rar.getName()[0 .. (partLayout ? -12 : -5)] - - // find all volumes of the same name - def volumes = rar.getParentFile().listFiles{ - it =~ (partLayout ? /$name[.]part\d{2}[.]/ : /$name[.](r\d{2}|rar)/) - } - - // find all incomplete volumes - def incomplete = volumes.findAll{ incomplete(it) } - - // all volumes complete, call unrar on first volume - if (incomplete.isEmpty()) { - def exitCode = execute("unrar", "x", "-y", "-p-", rar.getAbsolutePath(), rar.getPathWithoutExtension() + "/") - - // delete all volumes after successful extraction - if (exitCode == 0) { - volumes*.delete() - } + // delete original archive volumes after successful extraction + if (paths != null && !paths.isEmpty()) { + dir.listFiles{ it =~ /[.]rar$|[.]r[\d]+$/ }*.delete() } }