Add NoExtract detector
authorIra W. Snyder <devel@irasnyder.com>
Tue, 2 Jan 2007 01:07:09 +0000 (17:07 -0800)
committerIra W. Snyder <devel@irasnyder.com>
Tue, 2 Jan 2007 01:07:09 +0000 (17:07 -0800)
Add a new PAR2Set-derived detector which will detect types that are not
extractable, and should be repaired only.

Signed-off-by: Ira W. Snyder <devel@irasnyder.com>
PAR2Set/NoExtract.py [new file with mode: 0644]
PAR2Set/__init__.py
RarslaveDetector.py
rsutil/config.py

diff --git a/PAR2Set/NoExtract.py b/PAR2Set/NoExtract.py
new file mode 100644 (file)
index 0000000..ce2fdfa
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# vim: set ts=4 sts=4 sw=4 textwidth=92:
+
+import logging
+import PAR2Set.Base
+import rsutil.common
+
+#
+# This is a class that will only repair and delete, not extract
+#
+# It will detect sets like the following:
+# X.par2
+# X.vol0+1.par2
+# X.vol1+2.par2
+# 01.mp3
+# 02.mp3
+# 03.mp3
+#
+# Where the PAR2 files protect the mp3 files.
+#
+
+def detector (name_files, prot_files):
+       EXTRACT_REGEX = rsutil.common.config_get_value ('regular expressions', 'extractable_regex')
+       return not rsutil.common.has_a_match (EXTRACT_REGEX, prot_files)
+
+
+class NoExtract (PAR2Set.Base.Base):
+
+       def __repr__ (self):
+               return 'NoExtract'
+
+       def runAll (self):
+
+               # Repair Stage
+               ret = self.runVerifyAndRepair ()
+
+               if ret != rsutil.common.SUCCESS:
+                       logging.critical ('Repair stage failed for: %s' % self.p2file)
+                       return -rsutil.common.ECHECK
+
+               self.update_matches ()
+
+               # Deletion Stage
+               ret = self.runDelete ()
+
+               if ret != rsutil.common.SUCCESS:
+                       logging.critical ('Deletion stage failed for: %s' % self.p2file)
+                       return -rsutil.common.EDELETE
+
+               logging.info ('Successfully completed: %s' % self.p2file)
+               return rsutil.common.SUCCESS
+
index f42d2ad..753613e 100644 (file)
@@ -15,9 +15,10 @@ import Join
 import NewRAR
 import OldRAR
 import ZIP
+import NoExtract
 
 __all__ = ['Base', 'ExtractFirstBase', 'ExtractFirstNewRAR', 'ExtractFirstOldRAR', 'Join',
-               'NewRAR', 'OldRAR', 'ZIP']
+               'NewRAR', 'OldRAR', 'ZIP', 'NoExtract']
 
 def main ():
        pass
index 08a0b66..0895e46 100644 (file)
@@ -10,6 +10,7 @@ import PAR2Set.OldRAR
 import PAR2Set.NewRAR
 import PAR2Set.ExtractFirstOldRAR
 import PAR2Set.ExtractFirstNewRAR
+import PAR2Set.NoExtract
 
 import logging
 
@@ -24,6 +25,7 @@ class RarslaveDetector (object):
                                (PAR2Set.NewRAR.detector, PAR2Set.NewRAR.NewRAR),
                                (PAR2Set.ExtractFirstOldRAR.detector, PAR2Set.ExtractFirstOldRAR.ExtractFirstOldRAR),
                                (PAR2Set.ExtractFirstNewRAR.detector, PAR2Set.ExtractFirstNewRAR.ExtractFirstNewRAR),
+                               (PAR2Set.NoExtract.detector, PAR2Set.NoExtract.NoExtract),
                        )
 
        def __init__ (self, dir, p2file):
index 17e87d3..e0ab710 100644 (file)
@@ -124,6 +124,8 @@ class config (object):
                                        '^.*\.(par2|\d|\d\d\d|rar|r\d\d|zip)$',
                        ('regular expressions', 'basename_regex') :
                                        '^(.+)\.(par2|vol\d+\+\d+|\d\d\d|part\d+|rar|zip|avi|mp4|mkv|ogm)$',
+                       ('regular expressions', 'extractable_regex') :
+                                       '^.+\.(rar|r\d\d|\d\d\d|zip)$',
                        ('commands', 'unrar') : 'unrar x -o+ -- ',
                        ('commands', 'unzip') : 'unzip \"%s\" -d \"%s\" ',
                        ('commands', 'noextract') : 'mv \"%s\" \"%s\" ',