# Global Variables
(TYPE_OLDRAR, TYPE_NEWRAR, TYPE_ZIP, TYPE_NOEXTRACT) = range (4)
+(ECHECK, EEXTRACT, EDELETE) = range(1,4)
class RarslaveExtractor (object):
os.makedirs (todir)
except OSError:
# TODO: LOGGER
- # Failed mkdir -p, clean up time ...
- pass # FIXME: temporary for syntax
+ return -EEXTRACT
# Extract all heads
extraction_func = \
RAR_CMD = 'unrar x -o+ -- '
- #file = full_abspath (file)
- #todir = full_abspath (todir)
-
cmd = '%s \"%s\"' % (RAR_CMD, file)
ret = run_command (cmd, todir)
+ # Check error code
+ if ret != 0:
+ return -EEXTRACT
+
def __extract_zip (self, file, todir):
ZIP_CMD = 'unzip \"%s\" -d \"%s\"'
cmd = ZIP_CMD % (file, todir)
ret = run_command (cmd)
+ # Check error code
+ if ret != 0:
+ return -EEXTRACT
+
def __extract_noextract (self, file, todir):
# Just move this file to the $todir, since no extraction is needed
# FIXME: NOTE: mv will fail by itself if you're moving to the same dir!
cmd = 'mv \"%s\" \"%s\"' % (file, todir)
ret = run_command (cmd)
+ # Check error code
+ if ret != 0:
+ return -EEXTRACT
+
class RarslaveRepairer (object):
# run the command
ret = run_command (command, self.dir)
+ # check the result
+ if ret != 0:
+ # TODO: logger
+ print 'error during checkAndRepair()'
+ return -ECHECK
+
def run_command (cmd, indir=None):
# Runs the specified command-line in the directory given (or, in the current directory
# if none is given). It returns the status code given by the application.
# FIXME: re-enable this after testing
print 'RUNNING (%s): %s' % (indir, cmd)
+ return 0
+
# return os.system (cmd)
repairer = RarslaveRepairer (self.dir, par2head, join)
ret = repairer.checkAndRepair () # FIXME: Check return value
+ if ret: # FAILURE
+ return -ECHECK
+
# Extraction Stage
extractor = find_extraction_heads (self.dir, self.likely_files)
ret = extractor.extract ('extract_dir') # FIXME: Get it from the config
+ if ret: # FAILURE
+ return -EEXTRACT
+
# Deletion Stage
- # printlist ( find_deleteable_files (self.likely_files) )
deleteable_files = find_deleteable_files (self.likely_files)
ret = delete_list (deleteable_files)
+ if ret: # FAILURE
+ return -EDELETE
+
+ return 0
+
def delete_list (files, interactive=False):
# Delete a list of files
# TODO: Add the ability to confirm deletion, like in the original rarslave
# os.remove (f)
print 'rm', f
+ return 0
+
def generate_all_parsets (dir):
# Generate all parsets in the given directory.