diff options
author | Walter Purcaro <vuolter@gmail.com> | 2014-12-10 18:24:25 +0100 |
---|---|---|
committer | Walter Purcaro <vuolter@gmail.com> | 2014-12-10 18:24:25 +0100 |
commit | 10afb4ce9d155bdb05016b0661be3c4c3aa6b4f1 (patch) | |
tree | 1590669c02be79d11a0a3b68bdce3d2cb29fe992 /pyload/plugins/addon/RestartSlow.py | |
parent | Merge branch 'stable' into 0.4.10 (diff) | |
download | pyload-10afb4ce9d155bdb05016b0661be3c4c3aa6b4f1.tar.xz |
Fix previous merge
Diffstat (limited to 'pyload/plugins/addon/RestartSlow.py')
-rw-r--r-- | pyload/plugins/addon/RestartSlow.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/pyload/plugins/addon/RestartSlow.py b/pyload/plugins/addon/RestartSlow.py new file mode 100644 index 000000000..f3c98c461 --- /dev/null +++ b/pyload/plugins/addon/RestartSlow.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +import pycurl + +from module.plugins.Addon import Addon + + +class RestartSlow(Addon): + __name__ = "RestartSlow" + __type__ = "addon" + __version__ = "0.02" + + __config__ = [("free_limit" , "int" , "Transfer speed threshold in kilobytes" , 100 ), + ("free_time" , "int" , "Sample interval in minutes" , 5 ), + ("premium_limit", "int" , "Transfer speed threshold for premium download in kilobytes", 300 ), + ("premium_time" , "int" , "Sample interval for premium download in minutes" , 2 ), + ("safe_mode" , "bool", "Don't restart if download is not resumable" , True)] + + __description__ = """Restart slow downloads""" + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + + + event_list = ["downloadStarts"] + + + def setup(self): + self.info = {'chunk': {}} + + + def periodical(self): + if not self.pyfile.req.dl: + return + + if self.getConfig("safe_mode") and not self.pyfile.plugin.resumeDownload: + time = 30 + limit = 5 + else: + type = "premium" if self.pyfile.plugin.premium else "free" + time = max(30, self.getConfig("%s_time" % type) * 60) + limit = max(5, self.getConfig("%s_limit" % type) * 1024) + + chunks = [chunk for chunk in self.pyfile.req.dl.chunks \ + if chunk.id not in self.info['chunk'] or self.info['chunk'][chunk.id] not is (time, limit)] + + for chunk in chunks: + chunk.c.setopt(pycurl.LOW_SPEED_TIME , time) + chunk.c.setopt(pycurl.LOW_SPEED_LIMIT, limit) + + self.info['chunk'][chunk.id] = (time, limit) + + + def downloadStarts(self, pyfile, url, filename): + if self.cb or (self.getConfig("safe_mode") and not pyfile.plugin.resumeDownload): + return + + self.initPeriodical() |