summaryrefslogtreecommitdiffstats
path: root/module/plugins/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hooks')
-rwxr-xr-xmodule/plugins/hooks/Captcha9kw.py15
-rw-r--r--module/plugins/hooks/DeleteFinished.py93
-rw-r--r--module/plugins/hooks/LinkdecrypterCom.py4
-rw-r--r--module/plugins/hooks/RestartFailed.py124
-rw-r--r--module/plugins/hooks/SkipRev.py46
5 files changed, 277 insertions, 5 deletions
diff --git a/module/plugins/hooks/Captcha9kw.py b/module/plugins/hooks/Captcha9kw.py
index a01ce9576..bb2b8c862 100755
--- a/module/plugins/hooks/Captcha9kw.py
+++ b/module/plugins/hooks/Captcha9kw.py
@@ -30,17 +30,22 @@ from module.plugins.Hook import Hook
class Captcha9kw(Hook):
__name__ = "Captcha9kw"
- __version__ = "0.03"
+ __version__ = "0.04"
__description__ = """send captchas to 9kw.eu"""
__config__ = [("activated", "bool", "Activated", True),
("force", "bool", "Force CT even if client is connected", True),
+ ("https", "bool", "Enable HTTPS", "False"),
+ ("confirm", "bool", "Confirm Captcha", "False"),
+ ("captchaperhour", "int", "Captcha per hour", "9999"),
+ ("prio", "int", "Prio (1-10)", "0"),
("passkey", "password", "API key", ""),]
__author_name__ = ("RaNaN")
__author_mail__ = ("RaNaN@pyload.org")
- API_URL = "http://www.9kw.eu/index.cgi"
+ API_URL = "://www.9kw.eu/index.cgi"
def setup(self):
+ self.API_URL = "https"+self.API_URL if self.getConfig("https") else "http"+self.API_URL
self.info = {}
def getCredits(self):
@@ -68,6 +73,10 @@ class Captcha9kw(Hook):
response = getURL(self.API_URL, post = {
"apikey": self.getConfig("passkey"),
+ "prio": self.getConfig("prio"),
+ "confirm": self.getConfig("confirm"),
+ "captchaperhour": self.getConfig("captchaperhour"),
+ "maxtimeout": "220",
"pyload": "1",
"source": "pyload",
"base64": "1",
@@ -78,7 +87,7 @@ class Captcha9kw(Hook):
if response.isdigit():
self.logInfo(_("NewCaptchaID from upload: %s : %s" % (response,task.captchaFile)))
- for i in range(1, 200, 2):
+ for i in range(1, 220, 1):
response2 = getURL(self.API_URL, get = { "apikey": self.getConfig("passkey"), "id": response,"pyload": "1","source": "pyload", "action": "usercaptchacorrectdata" })
if(response2 != ""):
diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py
new file mode 100644
index 000000000..01cb1b8e1
--- /dev/null
+++ b/module/plugins/hooks/DeleteFinished.py
@@ -0,0 +1,93 @@
+ # -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: Walter Purcaro
+"""
+
+from module.database import style
+from module.plugins.Hook import Hook
+
+
+class DeleteFinished(Hook):
+ __name__ = "DeleteFinished"
+ __version__ = "1.02"
+ __description__ = "Automatically delete finished packages from queue"
+ __config__ = [
+ ("activated", "bool", "Activated", "False"),
+ ("interval", "int", "Delete every (hours)", "72")
+ ]
+ __author_name__ = ("Walter Purcaro")
+ __author_mail__ = ("vuolter@gmail.com")
+
+ ## overwritten methods ##
+ def periodical(self):
+ # self.logDebug("self.periodical")
+ if not self.info["sleep"]:
+ self.logInfo("self.deleteFinished")
+ self.deleteFinished()
+ self.info["sleep"] = True
+ self.addEvent("packageFinished", self.wakeup)
+
+ def pluginConfigChanged(self, plugin, name, value):
+ # self.logDebug("self.pluginConfigChanged")
+ if name == "interval" and value != self.interval:
+ self.interval = value
+ self.initPeriodical()
+
+ def unload(self):
+ # self.logDebug("self.unload")
+ self.removeEvent("packageFinished", self.wakeup)
+
+ def coreReady(self):
+ # self.logDebug("self.coreReady")
+ self.info = {"sleep": True}
+ interval = self.getConfig("interval") * 3600
+ self.pluginConfigChanged("DeleteFinished", "interval", interval)
+ self.addEvent("packageFinished", self.wakeup)
+
+ ## own methods ##
+ @style.queue
+ def deleteFinished(self):
+ self.c.execute("DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE package=packages.id AND status NOT IN (0,4))")
+ self.c.execute("DELETE FROM links WHERE NOT EXISTS(SELECT 1 FROM packages WHERE id=links.package)")
+
+ def wakeup(self, pypack):
+ # self.logDebug("self.wakeup")
+ self.removeEvent("packageFinished", self.wakeup)
+ self.info["sleep"] = False
+
+ ## event managing ##
+ def addEvent(self, event, handler):
+ if event in self.manager.events:
+ if handler not in self.manager.events[event]:
+ self.manager.events[event].append(handler)
+ # self.logDebug("self.addEvent: " + event + ": added handler")
+ else:
+ # self.logDebug("self.addEvent: " + event + ": NOT added handler")
+ return False
+ else:
+ self.manager.events[event] = [handler]
+ # self.logDebug("self.addEvent: " + event + ": added event and handler")
+ return True
+
+ def removeEvent(self, event, handler):
+ if event in self.manager.events and handler in self.manager.events[event]:
+ self.manager.events[event].remove(handler)
+ # self.logDebug("self.removeEvent: " + event + ": removed handler")
+ return True
+ else:
+ # self.logDebug("self.removeEvent: " + event + ": NOT removed handler")
+ return False
diff --git a/module/plugins/hooks/LinkdecrypterCom.py b/module/plugins/hooks/LinkdecrypterCom.py
index d3d6bce68..c117cafb9 100644
--- a/module/plugins/hooks/LinkdecrypterCom.py
+++ b/module/plugins/hooks/LinkdecrypterCom.py
@@ -24,9 +24,9 @@ from module.utils import remove_chars
class LinkdecrypterCom(Hook):
__name__ = "LinkdecrypterCom"
- __version__ = "0.17"
+ __version__ = "0.18"
__description__ = """linkdecrypter.com - regexp loader"""
- __config__ = [ ("activated", "bool", "Activated" , "True") ]
+ __config__ = [ ("activated", "bool", "Activated" , "False") ]
__author_name__ = ("zoidberg")
def coreReady(self):
diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py
new file mode 100644
index 000000000..7ee53deb9
--- /dev/null
+++ b/module/plugins/hooks/RestartFailed.py
@@ -0,0 +1,124 @@
+ # -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: Walter Purcaro
+"""
+
+from module.plugins.Hook import Hook
+from time import time
+
+
+class RestartFailed(Hook):
+ __name__ = "RestartFailed"
+ __version__ = "1.5"
+ __description__ = "Automatically restart failed/aborted downloads"
+ __config__ = [
+ ("activated", "bool", "Activated", "True"),
+ ("dlFail", "bool", "Restart when download fail", "True"),
+ ("dlFail_n", "int", "Only when failed downloads are at least", "5"),
+ ("dlFail_i", "int", "Only when elapsed time since last restart is (min)", "10"),
+ ("dlPrcs", "bool", "Restart after all downloads are processed", "True"),
+ ("recnt", "bool", "Restart after reconnecting", "True"),
+ ("rsLoad", "bool", "Restart on plugin activation", "False")
+ ]
+ __author_name__ = ("Walter Purcaro")
+ __author_mail__ = ("vuolter@gmail.com")
+
+ def restart(self, arg=None):
+ # self.logDebug("self.restart")
+ self.info["timerflag"] = False
+ self.info["dlfailed"] = 0
+ self.core.api.restartFailed()
+ self.logDebug("self.restart: self.core.api.restartFailed")
+ self.info["lastrstime"] = time()
+
+ def periodical(self):
+ # self.logDebug("self.periodical")
+ if self.info["timerflag"]:
+ self.restart()
+
+ def checkInterval(self, arg=None):
+ # self.logDebug("self.checkInterval")
+ now = time()
+ lastrstime = self.info["lastrstime"]
+ interval = self.getConfig("dlFail_i") * 60
+ if now < lastrstime + interval:
+ self.info["timerflag"] = True
+ else:
+ self.restart()
+
+ def checkFailed(self, pyfile):
+ # self.logDebug("self.checkFailed")
+ self.info["dlfailed"] += 1
+ curr = self.info["dlfailed"]
+ max = self.getConfig("dlFail_n")
+ if curr >= max:
+ self.checkInterval()
+
+ def addEvent(self, event, handler):
+ if event in self.manager.events:
+ if handler not in self.manager.events[event]:
+ self.manager.events[event].append(handler)
+ # self.logDebug("self.addEvent: " + event + ": added handler")
+ else:
+ # self.logDebug("self.addEvent: " + event + ": NOT added handler")
+ return False
+ else:
+ self.manager.events[event] = [handler]
+ # self.logDebug("self.addEvent: " + event + ": added event and handler")
+ return True
+
+ def removeEvent(self, event, handler):
+ if event in self.manager.events and handler in self.manager.events[event]:
+ self.manager.events[event].remove(handler)
+ # self.logDebug("self.removeEvent: " + event + ": removed handler")
+ return True
+ else:
+ # self.logDebug("self.removeEvent: " + event + ": NOT removed handler")
+ return False
+
+ def configEvents(self, plugin=None, name=None, value=None):
+ # self.logDebug("self.configEvents")
+ self.interval = self.getConfig("dlFail_i") * 60
+ dlFail = self.getConfig("dlFail")
+ dlPrcs = self.getConfig("dlPrcs")
+ recnt = self.getConfig("recnt")
+ if dlPrcs:
+ self.addEvent("allDownloadsProcessed", self.checkInterval)
+ else:
+ self.removeEvent("allDownloadsProcessed", self.checkInterval)
+ if not dlFail:
+ self.info["timerflag"] = False
+ if recnt:
+ self.addEvent("afterReconnecting", self.restart)
+ else:
+ self.removeEvent("afterReconnecting", self.restart)
+
+ def unload(self):
+ # self.logDebug("self.unload")
+ self.removeEvent("pluginConfigChanged", self.configEvents)
+ self.removeEvent("downloadFailed", self.checkFailed)
+ self.removeEvent("allDownloadsProcessed", self.checkInterval)
+ self.removeEvent("afterReconnecting", self.restart)
+
+ def coreReady(self):
+ # self.logDebug("self.coreReady")
+ self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False}
+ if self.getConfig("rsLoad"):
+ self.restart()
+ self.addEvent("downloadFailed", self.checkFailed)
+ self.addEvent("pluginConfigChanged", self.configEvents)
+ self.configEvents()
diff --git a/module/plugins/hooks/SkipRev.py b/module/plugins/hooks/SkipRev.py
new file mode 100644
index 000000000..561329122
--- /dev/null
+++ b/module/plugins/hooks/SkipRev.py
@@ -0,0 +1,46 @@
+ # -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: Walter Purcaro
+"""
+
+from module.plugins.Hook import Hook
+from os.path import basename
+from re import search
+
+
+class SkipRev(Hook):
+ __name__ = "SkipRev"
+ __version__ = "0.07"
+ __description__ = "Skip download when filename has rev extension"
+ __config__ = [
+ ("activated", "bool", "Activated", "False"),
+ ("number", "int", "Do not skip until rev part", "1")
+ ]
+ __author_name__ = ("Walter Purcaro")
+ __author_mail__ = ("vuolter@gmail.com")
+
+ def downloadPreparing(self, pyfile):
+ # self.logDebug("self.downloadPreparing")
+ name = basename(pyfile.name)
+ if not name.endswith(".rev"):
+ return
+ number = self.getConfig("number")
+ part = search(r'\.part(\d+)\.rev$', name)
+ if not part or int(part.group(1)) <= number:
+ return
+ self.logInfo("Skipping " + name)
+ pyfile.setStatus("skipped")