From 2302e70e6327042715ef5455eb9084410dcb516b Mon Sep 17 00:00:00 2001 From: nekosaur Date: Tue, 17 Mar 2015 17:47:38 +0100 Subject: [PATCH 1/2] Added callback parameter to rarfile.extract and extractall --- unrar/rarfile.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/unrar/rarfile.py b/unrar/rarfile.py index d95f6f8..bd176b9 100644 --- a/unrar/rarfile.py +++ b/unrar/rarfile.py @@ -270,7 +270,7 @@ def testrar(self): self._close(handle) return error - def extract(self, member, path=None, pwd=None): + def extract(self, member, path=None, pwd=None, callback=None): """Extract a member from the archive to the current working directory, using its full name. Its file information is extracted as accurately as possible. `member' may be a filename or a RarInfo object. You can @@ -282,10 +282,10 @@ def extract(self, member, path=None, pwd=None): if path is None: path = os.getcwd() - self._extract_members([member], path, pwd) + self._extract_members([member], path, pwd, callback) return os.path.join(path, member) - def extractall(self, path=None, members=None, pwd=None): + def extractall(self, path=None, members=None, pwd=None, callback=None): """Extract all members from the archive to the current working directory. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned @@ -293,9 +293,9 @@ def extractall(self, path=None, members=None, pwd=None): """ if members is None: members = self.namelist() - self._extract_members(members, path, pwd) + self._extract_members(members, path, pwd, callback) - def _extract_members(self, members, targetpath, pwd): + def _extract_members(self, members, targetpath, pwd, callback=None): """Extract the RarInfo objects 'members' to a physical file on the path targetpath. """ @@ -303,6 +303,10 @@ def _extract_members(self, members, targetpath, pwd): self.filename, mode=constants.RAR_OM_EXTRACT) handle = self._open(archive) + if callback is not None: + c_callback = unrarlib.UNRARCALLBACK(callback) + unrarlib.RARSetCallback(handle, c_callback, 0) + password = pwd or self.pwd if password is not None: unrarlib.RARSetPassword(handle, b(password)) From 42bf198bf4da7aa89df0cda2da2f0ef38650d186 Mon Sep 17 00:00:00 2001 From: nekosaur Date: Tue, 17 Mar 2015 17:53:39 +0100 Subject: [PATCH 2/2] Removed default value for callback parameter on _extract_members --- unrar/rarfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unrar/rarfile.py b/unrar/rarfile.py index bd176b9..0d30683 100644 --- a/unrar/rarfile.py +++ b/unrar/rarfile.py @@ -295,7 +295,7 @@ def extractall(self, path=None, members=None, pwd=None, callback=None): members = self.namelist() self._extract_members(members, path, pwd, callback) - def _extract_members(self, members, targetpath, pwd, callback=None): + def _extract_members(self, members, targetpath, pwd, callback): """Extract the RarInfo objects 'members' to a physical file on the path targetpath. """