diff options
Diffstat (limited to 'module/plugins/internal')
-rw-r--r-- | module/plugins/internal/Account.py | 69 | ||||
-rw-r--r-- | module/plugins/internal/Addon.py | 4 | ||||
-rw-r--r-- | module/plugins/internal/Base.py | 19 | ||||
-rw-r--r-- | module/plugins/internal/Crypter.py | 9 | ||||
-rw-r--r-- | module/plugins/internal/Hook.py | 6 | ||||
-rw-r--r-- | module/plugins/internal/Hoster.py | 21 | ||||
-rw-r--r-- | module/plugins/internal/Plugin.py | 8 | ||||
-rw-r--r-- | module/plugins/internal/SimpleCrypter.py | 4 | ||||
-rw-r--r-- | module/plugins/internal/SimpleHoster.py | 2 | ||||
-rw-r--r-- | module/plugins/internal/UnRar.py | 2 |
10 files changed, 94 insertions, 50 deletions
diff --git a/module/plugins/internal/Account.py b/module/plugins/internal/Account.py index 724322a4c..2ca01de0e 100644 --- a/module/plugins/internal/Account.py +++ b/module/plugins/internal/Account.py @@ -13,7 +13,7 @@ from module.utils import compare_time, lock class Account(Plugin): __name__ = "Account" __type__ = "account" - __version__ = "0.54" + __version__ = "0.55" __status__ = "testing" __description__ = """Base account plugin""" @@ -21,8 +21,8 @@ class Account(Plugin): __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - LOGIN_TIMEOUT = 10 * 60 #: Relogin accounts every 10 minutes - AUTO_TIMEOUT = True #: Automatically adjust relogin interval + LOGIN_TIMEOUT = 30 * 60 #: Relogin accounts every 30 minutes + AUTO_INTERVAL = True #: Automatically adjust relogin interval def __init__(self, manager, accounts): @@ -34,8 +34,11 @@ class Account(Plugin): self.accounts = accounts #@TODO: Recheck in 0.4.10 self.user = None - self.interval = self.LOGIN_TIMEOUT - self.auto_timeout = self.interval if self.AUTO_TIMEOUT else False + self.timeout = self.LOGIN_TIMEOUT + + #: Callback of periodical job task + self.cb = None + self.interval = self.LOGIN_TIMEOUT self.init() @@ -47,6 +50,28 @@ class Account(Plugin): pass + def init_periodical(self, delay=0, threaded=False): + self.cb = self.pyload.scheduler.addJob(max(0, delay), self._periodical, [threaded], threaded=threaded) + + + def _periodical(self, threaded): + if self.interval < 0: + self.cb = None + return + + try: + self.periodical() + + except Exception, e: + self.log_error(_("Error executing periodical task: %s") % e) + + self.init_periodical(self.interval, threaded) + + + def periodical(self): + raise NotImplementedError + + @property def logged(self): """ @@ -57,7 +82,7 @@ class Account(Plugin): self.sync() - if self.info['login']['timestamp'] + self.interval < time.time(): + if self.info['login']['timestamp'] + self.timeout < time.time(): self.log_debug("Reached login timeout for user `%s`" % self.user) return False else: @@ -87,15 +112,17 @@ class Account(Plugin): self.sync() + timestamp = time.time() + try: - self.info['login']['timestamp'] = time.time() #: Set timestamp for login self.signin(self.user, self.info['login']['password'], self.info['data']) except Skip: self.info['login']['valid'] = True - if self.auto_timeout: - self.auto_timeout *= 3 - self.interval = self.auto_timeout + + new_timeout = timestamp - self.info['login']['timestamp'] + if self.AUTO_INTERVAL and new_timeout > self.timeout: + self.timeout = new_timeout except Exception, e: self.log_error(_("Could not login user `%s`") % user, e) @@ -103,12 +130,12 @@ class Account(Plugin): else: self.info['login']['valid'] = True - if self.interval is self.auto_timeout: - self.interval = self.auto_timeout / 3 - self.auto_timeout = False finally: + self.info['login']['timestamp'] = timestamp #: Set timestamp for login + self.syncback() + return bool(self.info['login']['valid']) @@ -399,9 +426,19 @@ class Account(Plugin): ########################################################################### - def parse_traffic(self, size, unit="KB"): #@NOTE: Returns kilobytes in 0.4.9 - size = re.search(r'(\d*[\.,]?\d+)', size).group(1) #@TODO: Recjeck in 0.4.10 - return parse_size(size, unit) / 1024 #@TODO: Remove `/ 1024` in 0.4.10 + def parse_traffic(self, size, unit="byte"): #@NOTE: Returns kilobytes in 0.4.9 + unit = unit.lower().strip() #@TODO: Remove in 0.4.10 + size = re.search(r'(\d*[\.,]?\d+)', size).group(1) #@TODO: Recheck in 0.4.10 + + self.log_debug("Size: %s" % size, "Unit: %s" % unit) + + #@NOTE: Remove in 0.4.10 + if unit.startswith('t'): + traffic = float(size.replace(',', '.')) * 1 << 40 + else: + traffic = parse_size(size, unit) + + return traffic / 1024 #@TODO: Remove `/ 1024` in 0.4.10 def fail_login(self, msg=_("Login handshake has failed")): diff --git a/module/plugins/internal/Addon.py b/module/plugins/internal/Addon.py index 371f1da1b..cf3f01df1 100644 --- a/module/plugins/internal/Addon.py +++ b/module/plugins/internal/Addon.py @@ -23,7 +23,7 @@ def threaded(fn): class Addon(Plugin): __name__ = "Addon" __type__ = "hook" #@TODO: Change to `addon` in 0.4.10 - __version__ = "0.06" + __version__ = "0.07" __status__ = "testing" __threaded__ = [] #@TODO: Remove in 0.4.10 @@ -105,7 +105,7 @@ class Addon(Plugin): def periodical(self): - pass + raise NotImplementedError @property diff --git a/module/plugins/internal/Base.py b/module/plugins/internal/Base.py index bc9ef9158..28bc47556 100644 --- a/module/plugins/internal/Base.py +++ b/module/plugins/internal/Base.py @@ -52,7 +52,7 @@ def check_abort(fn): class Base(Plugin): __name__ = "Base" __type__ = "base" - __version__ = "0.02" + __version__ = "0.03" __status__ = "testing" __pattern__ = r'^unmatchable$' @@ -270,6 +270,8 @@ class Base(Plugin): if self.thread.m.reconnecting.isSet(): self.waiting = False self.wantReconnect = False + + self.req.clearCookies() raise Reconnect time.sleep(2) @@ -334,6 +336,21 @@ class Base(Plugin): self.fail("temp. offline") + def restart(self, msg="", premium=True): + if not msg: + msg = _("Restart plugin") if premium else _("Fallback to free processing") + + if not premium: + if self.premium: + self.rst_free = True + else: + self.fail("%s | %s" % (msg, _("Url was already processed as free"))) + + self.req.clearCookies() + + raise Retry(encode(msg)) #@TODO: Remove `encode` in 0.4.10 + + def retry(self, attemps=5, wait=1, msg=""): """ Retries and begin again from the beginning diff --git a/module/plugins/internal/Crypter.py b/module/plugins/internal/Crypter.py index a5c88aed9..cc1eeb5fd 100644 --- a/module/plugins/internal/Crypter.py +++ b/module/plugins/internal/Crypter.py @@ -7,7 +7,7 @@ from module.utils import save_path as safe_filename class Crypter(Base): __name__ = "Crypter" __type__ = "crypter" - __version__ = "0.11" + __version__ = "0.12" __status__ = "testing" __pattern__ = r'^unmatchable$' @@ -83,11 +83,12 @@ class Crypter(Base): subfolder_per_package = self.get_config('subfolder_per_package', True) for name, links, folder in self.packages: - self.log_debug("Parsed package: %s" % name, - "%d links" % len(links), - "Saved to folder: %s" % folder if folder else "Saved to download folder") + self.log_info(_("Parsed package: %s") % name, + _("Found %d links") % len(links), + _("Saved to folder: %s") % folder if folder else _("Saved to default download folder")) links = map(self.fixurl, links) + self.log_debug("LINKS for package " + name, *links) pid = self.pyload.api.addPackage(name, links, package_queue) diff --git a/module/plugins/internal/Hook.py b/module/plugins/internal/Hook.py index 8ae731a7f..6ead5cf0b 100644 --- a/module/plugins/internal/Hook.py +++ b/module/plugins/internal/Hook.py @@ -6,7 +6,7 @@ from module.plugins.internal.Addon import Addon, threaded class Hook(Addon): __name__ = "Hook" __type__ = "hook" - __version__ = "0.13" + __version__ = "0.14" __status__ = "testing" __description__ = """Base hook plugin""" @@ -24,3 +24,7 @@ class Hook(Addon): #@TODO: Remove in 0.4.10 def _log(self, level, plugintype, pluginname, messages): return super(Addon, self)._log(level, plugintype, pluginname.replace("Hook", ""), messages) + + + def periodical(self): + pass diff --git a/module/plugins/internal/Hoster.py b/module/plugins/internal/Hoster.py index 86b684414..b0458ca95 100644 --- a/module/plugins/internal/Hoster.py +++ b/module/plugins/internal/Hoster.py @@ -13,7 +13,7 @@ from module.utils import fs_decode, fs_encode, save_join as fs_join, save_path a class Hoster(Base): __name__ = "Hoster" __type__ = "hoster" - __version__ = "0.35" + __version__ = "0.36" __status__ = "testing" __pattern__ = r'^unmatchable$' @@ -93,19 +93,6 @@ class Hoster(Base): raise Fail(e) - def restart(self, msg="", premium=True): - if not msg: - msg = _("Simple restart") if premium else _("Fallback to free download") - - if not premium: - if self.premium: - self.rst_free = True - else: - self.fail("%s | %s" % (msg, _("Download was already free"))) - - raise Retry(encode(msg)) #@TODO: Remove `encode` in 0.4.10 - - @check_abort def download(self, url, get={}, post={}, ref=True, cookies=True, disposition=True): """ @@ -291,8 +278,10 @@ class Hoster(Base): return True else: - size = self.pyfile.size / 1024 #@TODO: Remove in 0.4.10 - self.log_info(_("Filesize: %s KiB, Traffic left for user %s: %s KiB") % (size, self.account.user, traffic)) #@TODO: Rewrite in 0.4.10 + #@TODO: Rewrite in 0.4.10 + size = self.pyfile.size / 1024 + self.log_info(_("Filesize: %s KiB") % size, + _("Traffic left for user %s: %s KiB") % (self.account.user, traffic)) return size <= traffic diff --git a/module/plugins/internal/Plugin.py b/module/plugins/internal/Plugin.py index cc35d919c..9d2aa8b50 100644 --- a/module/plugins/internal/Plugin.py +++ b/module/plugins/internal/Plugin.py @@ -109,10 +109,8 @@ def parse_time(string): time = seconds_to_midnight() else: - this = re.compile("this", re.I) - regex = re.compile(r'(\d+|[\w\-]+)\s*(hr|hour|min|sec|)', re.I) - - time = sum(1 if this.match(v) else str2int(v) * + regex = re.compile(r'(\d+| (?:this|an?) )\s*(hr|hour|min|sec|)', re.I) + time = sum((int(v) if v.strip() not in ("this", "a", "an") else 1) * {'hr': 3600, 'hour': 3600, 'min': 60, 'sec': 1, '': 1}[u.lower()] for v, u in regex.findall(string)) @@ -228,7 +226,7 @@ def chunks(iterable, size): class Plugin(object): __name__ = "Plugin" __type__ = "plugin" - __version__ = "0.46" + __version__ = "0.47" __status__ = "testing" __pattern__ = r'^unmatchable$' diff --git a/module/plugins/internal/SimpleCrypter.py b/module/plugins/internal/SimpleCrypter.py index 30b8ebfb0..d4ecd3117 100644 --- a/module/plugins/internal/SimpleCrypter.py +++ b/module/plugins/internal/SimpleCrypter.py @@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo class SimpleCrypter(Crypter, SimpleHoster): __name__ = "SimpleCrypter" __type__ = "crypter" - __version__ = "0.65" + __version__ = "0.66" __status__ = "testing" __pattern__ = r'^unmatchable$' @@ -139,8 +139,6 @@ class SimpleCrypter(Crypter, SimpleHoster): if self.PAGES_PATTERN: self.handle_pages(pyfile) - self.log_debug("Package has %d links" % len(self.links)) - if self.link: self.urls.append(self.link) diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py index 8f1b3ac5d..7e759b593 100644 --- a/module/plugins/internal/SimpleHoster.py +++ b/module/plugins/internal/SimpleHoster.py @@ -385,7 +385,7 @@ class SimpleHoster(Hoster): elif re.search('countdown|expired', errmsg, re.I): self.retry(10, 60, _("Link expired")) - elif re.search('maintenance|maintainance|temp', errmsg, re.I): + elif re.search('maint(e|ai)nance|temp', errmsg, re.I): self.temp_offline() elif re.search('up to|size', errmsg, re.I): diff --git a/module/plugins/internal/UnRar.py b/module/plugins/internal/UnRar.py index 908689109..39a919ec6 100644 --- a/module/plugins/internal/UnRar.py +++ b/module/plugins/internal/UnRar.py @@ -38,7 +38,7 @@ class UnRar(Extractor): re_multipart = re.compile(r'\.(part|r)(\d+)(?:\.rar)?(\.rev|\.bad)?', re.I) re_filefixed = re.compile(r'Building (.+)') - re_filelist = re.compile(r'^(.)(\s*[\w\.\-]+)\s+(\d+\s+)+(?:\d+\%\s+)?[\d\-]{8}\s+[\d\:]{5}', re.M|re.I) + re_filelist = re.compile(r'^(.)(\s*[\w.-]+)\s+(\d+\s+)+(?:\d+\%\s+)?[\d-]{8}\s+[\d\:]{5}', re.M|re.I) re_wrongpwd = re.compile(r'password', re.I) re_wrongcrc = re.compile(r'encrypted|damaged|CRC failed|checksum error|corrupt', re.I) |