summaryrefslogtreecommitdiffstats
path: root/module/plugins/hooks
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@gmail.com> 2014-12-10 16:54:05 +0100
committerGravatar Walter Purcaro <vuolter@gmail.com> 2014-12-10 16:54:05 +0100
commit3b64c8c07f2a331db66e6af6b5f617e6630d7b44 (patch)
tree0b071af35a7677f36895ec1dd8333f4ef56c79d8 /module/plugins/hooks
parentLicense cleanup (diff)
parent[CaptchaService] New service AdYouLike + AdsCaptcha detect_key fixup (diff)
downloadpyload-3b64c8c07f2a331db66e6af6b5f617e6630d7b44.tar.xz
Merge branch 'stable' into 0.4.10
Conflicts: module/plugins/hooks/ClickAndLoad.py module/plugins/internal/CaptchaService.py pyload/plugins/addon/Checksum.py pyload/plugins/addon/DownloadScheduler.py pyload/plugins/addon/ExternalScripts.py pyload/plugins/addon/ExtractArchive.py pyload/plugins/addon/IRCInterface.py pyload/plugins/addon/MergeFiles.py pyload/plugins/addon/MultiHome.py pyload/plugins/addon/SkipRev.py pyload/plugins/addon/UnSkipOnFail.py pyload/plugins/addon/WindowsPhoneToastNotify.py pyload/plugins/container/CCF.py pyload/plugins/hook/BypassCaptcha.py pyload/plugins/hook/Captcha9kw.py pyload/plugins/hook/CaptchaBrotherhood.py pyload/plugins/hook/DeathByCaptcha.py pyload/plugins/hook/ExpertDecoders.py pyload/plugins/hook/ImageTyperz.py pyload/plugins/hoster/DlFreeFr.py pyload/plugins/internal/OCR.py
Diffstat (limited to 'module/plugins/hooks')
-rw-r--r--module/plugins/hooks/RestartSlow.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/module/plugins/hooks/RestartSlow.py b/module/plugins/hooks/RestartSlow.py
new file mode 100644
index 000000000..587799235
--- /dev/null
+++ b/module/plugins/hooks/RestartSlow.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+import pycurl
+
+from module.plugins.Hook import Hook
+
+
+class RestartSlow(Hook):
+ __name__ = "RestartSlow"
+ __type__ = "hook"
+ __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 initPeriodical(self):
+ pass
+
+
+ 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
+
+ super(RestartSlow, self).initPeriodical()