[RARSLAVE] Eliminate duplicates when finding deleteable files
[rarslave2.git] / rarslave.py
index 8caf29e..6ffe57f 100644 (file)
@@ -5,7 +5,7 @@ VERSION="2.0.0"
 PROGRAM="rarslave2"
 
 import re, os, sys, optparse
-import par2parser
+import Par2Parser
 import RarslaveConfig
 import RarslaveLogger
 
@@ -209,8 +209,8 @@ def find_likely_files (dir, p2file):
 
        name_matches = [f for f in os.listdir (dir) if regex.match (f)]
        try:
-               parsed_matches = par2parser.get_protected_files (dir, p2file)
-       except EnvironmentError:
+               parsed_matches = Par2Parser.get_protected_files (dir, p2file)
+       except (EnvironmentError, OSError, OverflowError):
                parsed_matches = []
                logger.addMessage ('Bad par2 file: %s' % p2file, RarslaveLogger.MessageType.Fatal)
 
@@ -281,9 +281,9 @@ def find_extraction_heads (dir, files):
                for f in p2files:
                        done = False
                        try:
-                               prot_files = par2parser.get_protected_files (dir, f)
+                               prot_files = Par2Parser.get_protected_files (dir, f)
                                done = True
-                       except EnvironmentError:
+                       except (EnvironmentError, OverflowError, OSError):
                                logger.addMessage ('Error parsing PAR2 file: %s', f)
                                continue
 
@@ -335,13 +335,14 @@ def is_noextract (files):
        # TODO: Add others ???
        return generic_matcher (files, '^.*\.001$')
 
-def find_deleteable_files (files):
-       # Deleteable types regex should come from the config
-       dfiles = []
+def find_deleteable_files (dir, p2file):
+       likely = find_likely_files (dir, p2file)
        DELETE_REGEX = config.get_value ('regular expressions', 'delete_regex')
        dregex = re.compile (DELETE_REGEX, re.IGNORECASE)
 
-       return [f for f in files if dregex.match (f)]
+       dfiles = [f for f in likely if dregex.match (f)]
+       dset = set(dfiles) # to eliminate dupes
+       return list(dset)
 
 def printlist (li):
        for f in li:
@@ -402,7 +403,7 @@ class PAR2Set (object):
 
                # Deletion Stage
                DELETE_INTERACTIVE = options.interactive
-               deleteable_files = find_deleteable_files (self.likely_files)
+               deleteable_files = find_deleteable_files (self.dir, par2head)
                ret = delete_list (self.dir, deleteable_files, DELETE_INTERACTIVE)
 
                if ret != SUCCESS:
@@ -419,7 +420,7 @@ def delete_list (dir, files, interactive=False):
 
        done = False
        valid_y = ['Y', 'YES']
-       valid_n = ['N', 'NO']
+       valid_n = ['N', 'NO', '']
 
        if interactive:
                while not done: