2 # vim: set ts=4 sts=4 sw=4 textwidth=92:
5 Holds the NoExtract class.
7 This module works with sets that only need to repair and delete, and do
8 not need any extraction.
10 It will detect sets like the following:
19 Where the PAR2 files protect the mp3 files directly.
21 NOTE: It doesn't just detect mp3's, it will detect any set that does not
22 NOTE: have any extractable elements in it.
25 __author__ = "Ira W. Snyder (devel@irasnyder.com)"
26 __copyright__ = "Copyright (c) 2006,2007 Ira W. Snyder (devel@irasnyder.com)"
27 __license__ = "GNU GPL v2 (or, at your option, any later version)"
31 # Copyright (C) 2006,2007 Ira W. Snyder (devel@irasnyder.com)
33 # This program is free software; you can redistribute it and/or modify
34 # it under the terms of the GNU General Public License as published by
35 # the Free Software Foundation; either version 2 of the License, or
36 # (at your option) any later version.
38 # This program is distributed in the hope that it will be useful,
39 # but WITHOUT ANY WARRANTY; without even the implied warranty of
40 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41 # GNU General Public License for more details.
43 # You should have received a copy of the GNU General Public License
44 # along with this program; if not, write to the Free Software
45 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
47 from PAR2Set import Base, utils
49 class NoExtract(Base):
51 ############################################################################
55 regex = r'^.+\.(rar|r\d\d|\d\d\d|zip)$'
57 # This set has no extractable files
58 if utils.hasAMatch(regex, self.protectedFiles):
61 ############################################################################
63 # A NoExtract set is very different from the other types of sets in terms
64 # of filesystem state. It is very likely that normal name matching will not
67 # We override this to try to match on every name that is protected by this set,
68 # which will detect the .1 files that are produced when repairing
69 def updateFilesystemState(self):
71 self.similarlyNamedFiles = utils.findFileNameMatches(self.directory, self.baseName)
73 # Find extra name matched files
74 for f in self.protectedFiles:
75 baseName = utils.getBasename(f)
76 matches = utils.findFileNameMatches(self.directory, baseName)
78 self.similarlyNamedFiles += matches
80 # Remove all duplicates
81 self.similarlyNamedFiles = list(set(self.similarlyNamedFiles))
83 # Update the allFiles set
84 self.allFiles = set(self.similarlyNamedFiles + self.protectedFiles)
86 ############################################################################