* simplify sorty.groovy multi-volume rar extraction
This commit is contained in:
parent
03bf30596b
commit
db3be3e9d1
|
@ -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();
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue