diff options
author | zoidberg10 <zoidberg@mujmail.cz> | 2011-12-05 16:50:50 +0100 |
---|---|---|
committer | zoidberg10 <zoidberg@mujmail.cz> | 2011-12-05 16:50:50 +0100 |
commit | 81b2595cdbbca825f0ce553395acb88deffd4e99 (patch) | |
tree | 7d80d443244609ed80cf83a5426498747d5e735e /module/plugins/internal | |
parent | fix filesystem encoding issues on windows and synology nas (diff) | |
download | pyload-81b2595cdbbca825f0ce553395acb88deffd4e99.tar.xz |
simplehoster - use parseFileSize
Diffstat (limited to 'module/plugins/internal')
-rw-r--r-- | module/plugins/internal/SimpleHoster.py | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py index c101cbf6d..4a03ec60a 100644 --- a/module/plugins/internal/SimpleHoster.py +++ b/module/plugins/internal/SimpleHoster.py @@ -20,7 +20,7 @@ from urlparse import urlparse from re import search, sub from module.plugins.Hoster import Hoster -from module.utils import html_unescape +from module.utils import html_unescape, parseFileSize from module.network.RequestFactory import getURL def reSub(string, ruleslist): @@ -31,40 +31,37 @@ def reSub(string, ruleslist): def parseFileInfo(self, url = '', html = ''): if not html and hasattr(self, "html"): html = self.html - name, size, status, found = '', 0, 3, 0 + info = {"name" : url, "size" : 0, "status" : 3} if hasattr(self, "FILE_OFFLINE_PATTERN") and search(self.FILE_OFFLINE_PATTERN, html): # File offline - status = 1 - elif hasattr(self, "FILE_INFO_PATTERN"): - found = search(self.FILE_INFO_PATTERN, html) - if found: - name, size, units = found.group('N'), found.group('S'), found.group('U') + info['status'] = 1 else: - if hasattr(self, "FILE_NAME_PATTERN"): - found = search(self.FILE_NAME_PATTERN, html) - if found: - name = found.group('N') - - if hasattr(self, "FILE_SIZE_PATTERN"): - found = search(self.FILE_SIZE_PATTERN, html) - if found: - size, units = found.group('S'), found.group('U') + for pattern in ("FILE_INFO_PATTERN", "FILE_NAME_PATTERN", "FILE_SIZE_PATTERN"): + try: + info = dict(info, **search(getattr(self, pattern), html).groupdict()) + except AttributeError: + continue - if size: + if len(info) > 3: # File online, return name and size - size = float(reSub(size, self.SIZE_REPLACEMENTS)) * 1024 ** self.SIZE_UNITS[units] - status = 2 + info['status'] = 2 + if 'N' in info: info['name'] = reSub(info['N'], self.FILE_NAME_REPLACEMENTS) + if 'S' in info: + size = info['S'] + info['U'] if 'U' in info else info['S'] + print repr(size) + size = parseFileSize(reSub(size, self.FILE_SIZE_REPLACEMENTS)) + print repr(self.FILE_SIZE_REPLACEMENTS), repr(size) + info['size'] = size - name = reSub(name, self.NAME_REPLACEMENTS) if name else url - - return name, size, status, url + print info + return info def create_getInfo(plugin): def getInfo(urls): for url in urls: - file_info = parseFileInfo(plugin, url, getURL(reSub(url, plugin.URL_REPLACEMENTS), decode=True)) - yield file_info + file_info = parseFileInfo(plugin, url, getURL(reSub(url, plugin.FILE_URL_REPLACEMENTS), decode=True)) + yield file_info['name'], file_info['size'], file_info['status'], url return getInfo class PluginParseError(Exception): @@ -90,20 +87,18 @@ class SimpleHoster(Hoster): FILE_OFFLINE_PATTERN = r'File (deleted|not found)' TEMP_OFFLINE_PATTERN = r'Server maintainance' """ - #TODO: could be replaced when using utils.parseFileSize ? - #some plugins need to override these - SIZE_UNITS = {'k': 1, 'K': 1, 'M': 2, 'G': 3} - SIZE_REPLACEMENTS = [(',', ''), (' ', '')] - NAME_REPLACEMENTS = [] - URL_REPLACEMENTS = [] + + FILE_SIZE_REPLACEMENTS = [] + FILE_NAME_REPLACEMENTS = [] + FILE_URL_REPLACEMENTS = [] def setup(self): self.resumeDownload = self.multiDL = True if self.account else False def process(self, pyfile): - pyfile.url = reSub(pyfile.url, self.URL_REPLACEMENTS) + pyfile.url = reSub(pyfile.url, self.FILE_URL_REPLACEMENTS) self.html = self.load(pyfile.url, decode = True) - self.getFileInfo() + self.file_info = self.getFileInfo() if self.account: self.handlePremium() else: @@ -114,17 +109,25 @@ class SimpleHoster(Hoster): if hasattr(self, "TEMP_OFFLINE_PATTERN") and search(self.TEMP_OFFLINE_PATTERN, html): self.tempOffline() - name, size, status, url = parseFileInfo(self) - if status == 1: + file_info = parseFileInfo(self) + if file_info['status'] == 1: self.offline() - elif status != 2: + elif file_info['status'] != 2: + self.logDebug(file_info) self.parseError('File info') - if not name: - name = html_unescape(urlparse(self.pyfile.url).path.split("/")[-1]) + if file_info['name']: + self.pyfile.name = file_info['name'] + else: + self.pyfile.name = html_unescape(urlparse(self.pyfile.url).path.split("/")[-1]) + + if file_info['size']: + self.pyfile.size = file_info['size'] + else: + self.logError("File size not parsed") - self.logDebug("FILE NAME: %s FILE SIZE: %s" % (name, size)) - self.pyfile.name, self.pyfile.size = name, size + self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) + return file_info def handleFree(self): self.fail("Free download not implemented") |