From 0da85ec20db476531f66320123432c41d1df1c01 Mon Sep 17 00:00:00 2001 From: Stefano Date: Mon, 8 Apr 2013 23:27:57 +0200 Subject: DownloadScheduler: ability to abort downloads http://forum.pyload.org/viewtopic.php?f=7&t=2403 --- module/plugins/hooks/DownloadScheduler.py | 72 +++++++++++++++++-------------- 1 file changed, 40 insertions(+), 32 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DownloadScheduler.py b/module/plugins/hooks/DownloadScheduler.py index 7cadede38..4049d71c5 100644 --- a/module/plugins/hooks/DownloadScheduler.py +++ b/module/plugins/hooks/DownloadScheduler.py @@ -18,61 +18,69 @@ import re from time import localtime + from module.plugins.Hook import Hook + class DownloadScheduler(Hook): __name__ = "DownloadScheduler" - __version__ = "0.20" + __version__ = "0.21" __description__ = """Download Scheduler""" - __config__ = [("activated", "bool", "Activated", "False"), - ("timetable", "str", "List time periods as hh:mm full or number(kB/s)", "0:00 full, 7:00 250, 10:00 0, 17:00 150")] - __author_name__ = ("zoidberg") - __author_mail__ = ("zoidberg@mujmail.cz") - + __config__ = [("activated", "bool", "Activated", "False"), + ("timetable", "str", "List time periods as hh:mm full or number(kB/s)", + "0:00 full, 7:00 250, 10:00 0, 17:00 150"), + ("abort", "bool", "Abort active downloads when start period with speed 0", "False")] + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + def setup(self): - self.cb = None # callback to scheduler job; will be by removed hookmanager when hook unloaded - + self.cb = None # callback to scheduler job; will be by removed hookmanager when hook unloaded + def coreReady(self): self.updateSchedule() - - def updateSchedule(self, schedule = None): - if schedule is None: - schedule = self.getConfig("timetable") - - schedule = re.findall("(\d{1,2}):(\d{2})[\s]*(-?\d+)", schedule.lower().replace("full", "-1").replace("none", "0")) + + def updateSchedule(self, schedule=None): + if schedule is None: + schedule = self.getConfig("timetable") + + schedule = re.findall("(\d{1,2}):(\d{2})[\s]*(-?\d+)", + schedule.lower().replace("full", "-1").replace("none", "0")) if not schedule: self.logError("Invalid schedule") return - + t0 = localtime() now = (t0.tm_hour, t0.tm_min, t0.tm_sec, "X") schedule = sorted([(int(x[0]), int(x[1]), 0, int(x[2])) for x in schedule] + [now]) - - self.logDebug("Schedule", schedule) - + + self.logDebug("Schedule", schedule) + for i, v in enumerate(schedule): if v[3] == "X": - last, next = schedule[i-1], schedule[(i+1) % len(schedule)] + last, next = schedule[i - 1], schedule[(i + 1) % len(schedule)] self.logDebug("Now/Last/Next", now, last, next) - - self.setDownloadSpeed(last[3]) - - next_time = (((24 + next[0] - now[0])* 60 + next[1] - now[1]) * 60 + next[2] - now[2]) % 86400 + + self.setDownloadSpeed(last[3]) + + next_time = (((24 + next[0] - now[0]) * 60 + next[1] - now[1]) * 60 + next[2] - now[2]) % 86400 self.core.scheduler.removeJob(self.cb) - self.cb = self.core.scheduler.addJob(next_time, self.updateSchedule, threaded=False) - - def setDownloadSpeed(self, speed): + self.cb = self.core.scheduler.addJob(next_time, self.updateSchedule, threaded=False) + + def setDownloadSpeed(self, speed): if speed == 0: - self.logInfo("Stopping download server. (Running downloads will not be aborted.)") + abort = self.getConfig("abort") + self.logInfo("Stopping download server. (Running downloads will %sbe aborted.)" % ('' if abort else 'not ')) self.core.api.pauseServer() + if abort: + self.core.api.stopAllDownloads() else: self.core.api.unpauseServer() - + if speed > 0: self.logInfo("Setting download speed to %d kB/s" % speed) - self.core.api.setConfigValue("download","limit_speed",1) - self.core.api.setConfigValue("download","max_speed",speed) + self.core.api.setConfigValue("download", "limit_speed", 1) + self.core.api.setConfigValue("download", "max_speed", speed) else: self.logInfo("Setting download speed to FULL") - self.core.api.setConfigValue("download","limit_speed",0) - self.core.api.setConfigValue("download","max_speed",-1) \ No newline at end of file + self.core.api.setConfigValue("download", "limit_speed", 0) + self.core.api.setConfigValue("download", "max_speed", -1) -- cgit v1.2.3 From c235e869a50d8783b01f5a46d5b93e171cbbb71e Mon Sep 17 00:00:00 2001 From: Stefano Date: Fri, 12 Apr 2013 15:30:17 +0200 Subject: New debrid: MultiDebridCom http://forum.pyload.org/viewtopic.php?f=13&t=2426 --- module/plugins/hooks/MultiDebridCom.py | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 module/plugins/hooks/MultiDebridCom.py (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/MultiDebridCom.py b/module/plugins/hooks/MultiDebridCom.py new file mode 100644 index 000000000..c95138648 --- /dev/null +++ b/module/plugins/hooks/MultiDebridCom.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +############################################################################ +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU Affero 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 Affero General Public License for more details. # +# # +# You should have received a copy of the GNU Affero General Public License # +# along with this program. If not, see . # +############################################################################ + +from module.plugins.internal.MultiHoster import MultiHoster +from module.network.RequestFactory import getURL +from module.common.json_layer import json_loads + + +class MultiDebridCom(MultiHoster): + __name__ = "MultiDebridCom" + __version__ = "0.01" + __type__ = "hook" + __config__ = [("activated", "bool", "Activated", "False"), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", "False"), + ("interval", "int", "Reload interval in hours (0 to disable)", "24")] + + __description__ = """Multi-debrid.com hook plugin""" + __author_name__ = ("stickell") + __author_mail__ = ("l.stickell@yahoo.it") + + def getHoster(self): + json_data = getURL('http://multi-debrid.com/api.php?hosts', decode=True) + self.logDebug('JSON data: ' + json_data) + json_data = json_loads(json_data) + + return json_data['hosts'] -- cgit v1.2.3 From a0abc945171c06fc74e437cc438d606917a1e3ce Mon Sep 17 00:00:00 2001 From: Stefano Date: Tue, 23 Apr 2013 21:04:25 +0300 Subject: DebridItaliaCom: new hoster supported --- module/plugins/hooks/DebridItaliaCom.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DebridItaliaCom.py b/module/plugins/hooks/DebridItaliaCom.py index d570eebe3..955812f25 100644 --- a/module/plugins/hooks/DebridItaliaCom.py +++ b/module/plugins/hooks/DebridItaliaCom.py @@ -20,7 +20,7 @@ from module.plugins.internal.MultiHoster import MultiHoster class DebridItaliaCom(MultiHoster): __name__ = "DebridItaliaCom" - __version__ = "0.03" + __version__ = "0.04" __type__ = "hook" __config__ = [("activated", "bool", "Activated", "False"), ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), @@ -38,4 +38,4 @@ class DebridItaliaCom(MultiHoster): "bitshare.com", "share-links.biz", "putlocker.com", "uploaded.to", "speedload.org", "rapidgator.net", "likeupload.net", "cyberlocker.ch", "depositfiles.com", "extabit.com", "filefactory.com", "sharefiles.co", - "ryushare.com", "tusfiles.net", "nowvideo.co"] + "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net"] -- cgit v1.2.3 From 3dfe9873da3ed48f1fe912e868ba628f0daf15d0 Mon Sep 17 00:00:00 2001 From: Stefano Date: Sun, 5 May 2013 21:01:48 +0300 Subject: DebridItaliaCom: new hoster supported --- module/plugins/hooks/DebridItaliaCom.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DebridItaliaCom.py b/module/plugins/hooks/DebridItaliaCom.py index 955812f25..80cdc45f6 100644 --- a/module/plugins/hooks/DebridItaliaCom.py +++ b/module/plugins/hooks/DebridItaliaCom.py @@ -20,7 +20,7 @@ from module.plugins.internal.MultiHoster import MultiHoster class DebridItaliaCom(MultiHoster): __name__ = "DebridItaliaCom" - __version__ = "0.04" + __version__ = "0.05" __type__ = "hook" __config__ = [("activated", "bool", "Activated", "False"), ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), @@ -38,4 +38,4 @@ class DebridItaliaCom(MultiHoster): "bitshare.com", "share-links.biz", "putlocker.com", "uploaded.to", "speedload.org", "rapidgator.net", "likeupload.net", "cyberlocker.ch", "depositfiles.com", "extabit.com", "filefactory.com", "sharefiles.co", - "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net"] + "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net", "letitbit.net"] -- cgit v1.2.3 From b364eef36462937a2edd278ba020224ce7360fa4 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 11 May 2013 01:20:09 +0200 Subject: Added plugin DeleteFinished, version 0.1 --- module/plugins/hooks/DeleteFinished.py | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 module/plugins/hooks/DeleteFinished.py (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py new file mode 100644 index 000000000..6098db9a5 --- /dev/null +++ b/module/plugins/hooks/DeleteFinished.py @@ -0,0 +1,48 @@ + # -*- 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 . + + @author: Walter Purcaro +""" + +from module.plugins.Hook import Hook +from time import time + + +class DeleteFinished(Hook): + __name__ = "DeleteFinished" + __version__ = "0.1" + __description__ = "Automatically delete finished packages from queue" + __config__ = [ + ("activated", "bool", "Activated", "False"), + ("interval", "int", "Delete every (hours)", "48") + ] + __author_name__ = ("Walter Purcaro") + __author_mail__ = ("vuolter@gmail.com") + + event_map = {"periodical": "check"} + + def check(self): + now = time.time() + deletetime = self.getConfig("interval") * 3600 + self.info["lastdelete"] + if now >= deletetime: + self.core.api.deleteFinished() + self.logDebug("called self.core.api.deleteFinished()") + self.info["lastdelete"] = now + + def setup(self): + now = time.time() + self.info = {"lastdelete": now} + self.interval = 3600 -- cgit v1.2.3 From a133bdfe5e673479f3441afa7ae2f7c337753852 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 11 May 2013 19:28:38 +0200 Subject: Version 0.2: fixes --- module/plugins/hooks/DeleteFinished.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py index 6098db9a5..be83d6ced 100644 --- a/module/plugins/hooks/DeleteFinished.py +++ b/module/plugins/hooks/DeleteFinished.py @@ -23,19 +23,18 @@ from time import time class DeleteFinished(Hook): __name__ = "DeleteFinished" - __version__ = "0.1" + __version__ = "0.2" __description__ = "Automatically delete finished packages from queue" __config__ = [ ("activated", "bool", "Activated", "False"), - ("interval", "int", "Delete every (hours)", "48") + ("interval", "int", "Delete every (hours)", "72") ] __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - event_map = {"periodical": "check"} - - def check(self): - now = time.time() + #: event_map don't load periodical anyway + def periodical(self): + now = time() deletetime = self.getConfig("interval") * 3600 + self.info["lastdelete"] if now >= deletetime: self.core.api.deleteFinished() @@ -43,6 +42,6 @@ class DeleteFinished(Hook): self.info["lastdelete"] = now def setup(self): - now = time.time() + now = time() self.info = {"lastdelete": now} self.interval = 3600 -- cgit v1.2.3 From 456b8c6f0daf3b2c0d5149c9be50ff213782bdd9 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 4 May 2013 09:05:17 +0200 Subject: Added fully rewrited RestartFailed plugin, originally by bambie --- module/plugins/hooks/RestartFailed.py | 69 +++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 module/plugins/hooks/RestartFailed.py (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py new file mode 100644 index 000000000..5c3a4fbe0 --- /dev/null +++ b/module/plugins/hooks/RestartFailed.py @@ -0,0 +1,69 @@ +# -*- 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 . + + @author: vuolter +""" + +from module.plugins.Hook import Hook +import time + +class RestartFailed(Hook): + __name__ = "RestartFailed" + __version__ = "0.3" + __description__ = "Restart failed packages according to defined rules" + __config__ = [ ("activated", "bool", "Activated" , "True"), + ("on_downloadFailed", "bool", "Restart if downloads fails" , "True"), + ("downloadFailed_number", "int", "Only restart when failed downloads are more than", "5"), + ("downloadFailed_interval", "int", "Only restart when elapsed time since last one is (min)", "10"), + ("on_packageFinished", "bool", "Restart when package finished" , "True") + ("on_reconnect", "bool", "Restart after reconnected" , "True") ] + __author_name__ = ("vuolter") + __author_mail__ = ("vuolter@gmail.com") + + failed = 0 + lastime = 0 + + def checkInterval(self, interval): + interval *= 60 + if now = time() >= lastime + interval : + lastime = now + return True + else + return False + + def downloadFailed(self, pyfile): + if not self.getConfig("on_downloadFailed"): + failed = 0 + return + if failed > number = self.getConfig("downloadFailed_number") + and checkInterval(interval = self.getConfig("downloadFailed_interval")) : + self.core.api.restartFailed() + self.logDebug(self.__name__ + ": executed after " + failed + " downloads failed") + failed = 0 + else + ++failed + + def packageFinished(self, pypack): + if not self.getConfig("on_packageFinished"): + return + self.core.api.restartFailed() + self.logDebug(self.__name__ + ": executed after one package finished") + + def afterReconnecting(self, ip): + if not self.getConfig("on_reconnect"): + return + self.core.api.restartFailed() + self.logDebug(self.__name__ + ": executed after reconnecting") -- cgit v1.2.3 From b99de39af5a5f5201c516d4435414c6d05dd86f3 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 4 May 2013 13:18:06 +0200 Subject: Version 0.4: fixes --- module/plugins/hooks/RestartFailed.py | 119 ++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 57 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 5c3a4fbe0..24bbe85c4 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -1,69 +1,74 @@ -# -*- coding: utf-8 -*- + # -*- 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 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. + 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 . + You should have received a copy of the GNU General Public License + along with this program; if not, see . - @author: vuolter + @author: vuolter """ from module.plugins.Hook import Hook import time + class RestartFailed(Hook): - __name__ = "RestartFailed" - __version__ = "0.3" - __description__ = "Restart failed packages according to defined rules" - __config__ = [ ("activated", "bool", "Activated" , "True"), - ("on_downloadFailed", "bool", "Restart if downloads fails" , "True"), - ("downloadFailed_number", "int", "Only restart when failed downloads are more than", "5"), - ("downloadFailed_interval", "int", "Only restart when elapsed time since last one is (min)", "10"), - ("on_packageFinished", "bool", "Restart when package finished" , "True") - ("on_reconnect", "bool", "Restart after reconnected" , "True") ] - __author_name__ = ("vuolter") - __author_mail__ = ("vuolter@gmail.com") + __name__ = "RestartFailed" + __version__ = "0.4" + __description__ = "Restart failed packages according to defined rules" + __config__ = [ + ("activated", "bool", "Activated", "True"), + ("dlFailed", "bool", "Restart if downloads fails", "True"), + ("dlFailed_n", "int", "Only when failed downloads are more than", "5"), + ("dlFailed_i", "int", "Only when elapsed time since last restart is (min)", "10"), + ("packFinished", "bool", "Restart when package finished", "True") + ("recnt", "bool", "Restart after reconnected", "True") + ] + __author_name__ = ("vuolter") + __author_mail__ = ("vuolter@gmail.com") + + failed = 0 + lastime = 0 + + def checkInterval(self, interval): + now = time() + interval *= 60 + if now >= lastime + interval: + lastime = now + return True + else: + return False + + def downloadFailed(self, pyfile): + if not self.getConfig("dlFailed"): + failed = 0 + return + number = self.getConfig("dlFailed_n") + interval = self.getConfig("dlFailed_i") + if failed > number and checkInterval(interval): + self.core.api.restartFailed() + self.logDebug("executed after " + failed + " downloads failed") + failed = 0 + else: + failed + 1 + + def packageFinished(self, pypack): + if not self.getConfig("packFinished"): + return + self.core.api.restartFailed() + self.logDebug("executed after one package finished") - failed = 0 - lastime = 0 - - def checkInterval(self, interval): - interval *= 60 - if now = time() >= lastime + interval : - lastime = now - return True - else - return False - - def downloadFailed(self, pyfile): - if not self.getConfig("on_downloadFailed"): - failed = 0 - return - if failed > number = self.getConfig("downloadFailed_number") - and checkInterval(interval = self.getConfig("downloadFailed_interval")) : - self.core.api.restartFailed() - self.logDebug(self.__name__ + ": executed after " + failed + " downloads failed") - failed = 0 - else - ++failed - - def packageFinished(self, pypack): - if not self.getConfig("on_packageFinished"): - return - self.core.api.restartFailed() - self.logDebug(self.__name__ + ": executed after one package finished") - - def afterReconnecting(self, ip): - if not self.getConfig("on_reconnect"): - return - self.core.api.restartFailed() - self.logDebug(self.__name__ + ": executed after reconnecting") + def afterReconnecting(self, ip): + if not self.getConfig("recnt"): + return + self.core.api.restartFailed() + self.logDebug("executed after reconnecting") -- cgit v1.2.3 From be8e019964119e4a074ecef417f0cd38292d0eee Mon Sep 17 00:00:00 2001 From: Vuolter Date: Tue, 7 May 2013 08:17:31 +0200 Subject: Version 0.5: fixes again --- module/plugins/hooks/RestartFailed.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 24bbe85c4..11308c963 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.4" + __version__ = "0.5" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -42,24 +42,24 @@ class RestartFailed(Hook): def checkInterval(self, interval): now = time() interval *= 60 - if now >= lastime + interval: - lastime = now + if now >= self.lastime + interval: + self.lastime = now return True else: return False def downloadFailed(self, pyfile): if not self.getConfig("dlFailed"): - failed = 0 + self.failed = 0 return number = self.getConfig("dlFailed_n") interval = self.getConfig("dlFailed_i") - if failed > number and checkInterval(interval): + if self.failed > number and checkInterval(interval): self.core.api.restartFailed() - self.logDebug("executed after " + failed + " downloads failed") - failed = 0 + self.logDebug("executed after " + self.failed + " failed downloads") + self.failed = 0 else: - failed + 1 + self.failed += 1 def packageFinished(self, pypack): if not self.getConfig("packFinished"): -- cgit v1.2.3 From f8ba94db046ac76a94d52ffa56a4c2f7173ffbdd Mon Sep 17 00:00:00 2001 From: Vuolter Date: Thu, 9 May 2013 18:13:20 +0200 Subject: Version 0.6: improved code + several bugfixes --- module/plugins/hooks/RestartFailed.py | 95 ++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 35 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 11308c963..bc9ca699d 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,52 +23,77 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.5" + __version__ = "0.6" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), - ("dlFailed", "bool", "Restart if downloads fails", "True"), - ("dlFailed_n", "int", "Only when failed downloads are more than", "5"), - ("dlFailed_i", "int", "Only when elapsed time since last restart is (min)", "10"), - ("packFinished", "bool", "Restart when package finished", "True") - ("recnt", "bool", "Restart after reconnected", "True") + ("dlFail", "bool", "Restart if 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"), + ("pkFinish", "bool", "Restart when a package is finished", "True") + ("recnt", "bool", "Restart after reconnecting", "True") ] __author_name__ = ("vuolter") __author_mail__ = ("vuolter@gmail.com") - failed = 0 - lastime = 0 + event_map = {"pluginConfigChanged": "configEvents"} - def checkInterval(self, interval): + def restart(self): + self.core.api.restartFailed() + self.logDebug("called self.core.api.restartFailed()") + + def setTimer(self, timer): + self.info["timer"] = timer + if timer: + self.manager.addEvent("periodical", doRestart) + else: + self.manager.removeEvent("periodical", doRestart) + + def doRestart(self): now = time() - interval *= 60 - if now >= self.lastime + interval: - self.lastime = now - return True + lastrstime = self.getInfo("lastrstime") + interval = self.getConfig("dlFail_i") * 60 + timer = self.getInfo("timer") + newtimer = 0 + value = False + if now >= lastrstime + interval: + self.info["lastrstime"] = now + value = True + self.restart() else: - return False + newtimer = 1 + if newtimer != timer: + setTimer(newtimer) + return value - def downloadFailed(self, pyfile): - if not self.getConfig("dlFailed"): - self.failed = 0 - return - number = self.getConfig("dlFailed_n") - interval = self.getConfig("dlFailed_i") - if self.failed > number and checkInterval(interval): - self.core.api.restartFailed() - self.logDebug("executed after " + self.failed + " failed downloads") - self.failed = 0 + def checkFailed(self, pyfile): + curr = self.getInfo("dlfailed") + max = self.getConfig("dlFail_n") + if curr >= max and doRestart(): + self.info["dlfailed"] = 0 else: - self.failed += 1 + self.info["dlfailed"] = curr + 1 - def packageFinished(self, pypack): - if not self.getConfig("packFinished"): - return - self.core.api.restartFailed() - self.logDebug("executed after one package finished") + def arrangeChecks(self): + self.info["dlfailed"] = 1000 + if self.getInfo("timer"): + setTimer(0) - def afterReconnecting(self, ip): - if not self.getConfig("recnt"): - return - self.core.api.restartFailed() - self.logDebug("executed after reconnecting") + def configEvents(self): + if self.getConfig("dlFail"): + self.manager.addEvent("downloadFailed", checkFailed) + else: + self.manager.removeEvent("downloadFailed", checkFailed) + self.arrangeChecks() + if self.getConfig("pkFinish"): + self.manager.addEvent("packageFinished", restart) + else: + self.manager.removeEvent("packageFinished", restart) + if self.getConfig("recnt"): + self.manager.addEvent("afterReconnecting", restart) + else: + self.manager.removeEvent("afterReconnecting", restart) + + def setup(self): + self.info = {"dlfailed": 0, "lastrstime": 0, "timer": 0} + self.configEvents() -- cgit v1.2.3 From 5e9aa852a7be4685642f18679fd615748e4ec028 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Thu, 9 May 2013 18:20:01 +0200 Subject: Version 0.7: bugfix --- module/plugins/hooks/RestartFailed.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index bc9ca699d..67dae19e7 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.6" + __version__ = "0.7" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -40,6 +40,7 @@ class RestartFailed(Hook): def restart(self): self.core.api.restartFailed() + self.info["dlfailed"] = 0 self.logDebug("called self.core.api.restartFailed()") def setTimer(self, timer): @@ -57,9 +58,9 @@ class RestartFailed(Hook): newtimer = 0 value = False if now >= lastrstime + interval: + self.restart() self.info["lastrstime"] = now value = True - self.restart() else: newtimer = 1 if newtimer != timer: @@ -69,8 +70,8 @@ class RestartFailed(Hook): def checkFailed(self, pyfile): curr = self.getInfo("dlfailed") max = self.getConfig("dlFail_n") - if curr >= max and doRestart(): - self.info["dlfailed"] = 0 + if curr >= max: + doRestart() else: self.info["dlfailed"] = curr + 1 -- cgit v1.2.3 From 0d9f1d9907cf5611cc6122d11798677bd0bd9f0a Mon Sep 17 00:00:00 2001 From: Vuolter Date: Thu, 9 May 2013 18:40:44 +0200 Subject: Version 0.8: improved timing --- module/plugins/hooks/RestartFailed.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 67dae19e7..c2834e424 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.7" + __version__ = "0.8" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -43,8 +43,9 @@ class RestartFailed(Hook): self.info["dlfailed"] = 0 self.logDebug("called self.core.api.restartFailed()") - def setTimer(self, timer): + def setTimer(self, timer, interval): self.info["timer"] = timer + self.interval = interval if timer: self.manager.addEvent("periodical", doRestart) else: @@ -64,7 +65,7 @@ class RestartFailed(Hook): else: newtimer = 1 if newtimer != timer: - setTimer(newtimer) + setTimer(newtimer, interval) return value def checkFailed(self, pyfile): @@ -78,7 +79,7 @@ class RestartFailed(Hook): def arrangeChecks(self): self.info["dlfailed"] = 1000 if self.getInfo("timer"): - setTimer(0) + setTimer(0, 60) def configEvents(self): if self.getConfig("dlFail"): -- cgit v1.2.3 From 2eba1031b8e34cee3f5189a6e727d3ee43ecbf9b Mon Sep 17 00:00:00 2001 From: Vuolter Date: Fri, 10 May 2013 21:32:56 +0200 Subject: Version 1.0: improved code + added feature "Restart on plugin activation" + many bugfixes + tested code a bit --- module/plugins/hooks/RestartFailed.py | 124 +++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 46 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index c2834e424..273bb2910 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, see . - @author: vuolter + @author: Walter Purcaro """ from module.plugins.Hook import Hook @@ -23,79 +23,111 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.8" - __description__ = "Restart failed packages according to defined rules" + __version__ = "1.0" + __description__ = "Automatically restart failed/aborted downloads according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), - ("dlFail", "bool", "Restart if download fail", "True"), - ("dlFail_n", "int", "Only when failed downloads are at least", "5"), + ("dlFail", "bool", "Restart when download fail", "True"), + ("dlFail_n", "int", "Only when failed/aborted downloads are at least", "5"), ("dlFail_i", "int", "Only when elapsed time since last restart is (min)", "10"), - ("pkFinish", "bool", "Restart when a package is finished", "True") - ("recnt", "bool", "Restart after reconnecting", "True") + ("dlPrcs", "bool", "Restart after all downloads are processed", "True"), + ("recnt", "bool", "Restart after reconnecting", "True"), + ("rsLoad", "bool", "Restart on plugin activation", "False") ] - __author_name__ = ("vuolter") + __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") event_map = {"pluginConfigChanged": "configEvents"} + def resetCounters(self): + self.info["dlfailed"] = 0 + if self.info["timerflag"]: + self.setTimer(False, None) + def restart(self): + now = time.time() + self.resetCounters() self.core.api.restartFailed() - self.info["dlfailed"] = 0 self.logDebug("called self.core.api.restartFailed()") + self.info["lastrstime"] = now - def setTimer(self, timer, interval): - self.info["timer"] = timer - self.interval = interval - if timer: - self.manager.addEvent("periodical", doRestart) + def setTimer(self, timerflag, interval): + self.info["timerflag"] = timerflag + if interval and interval != self.interval: + self.interval = interval + if timerflag: + self.addEvent("periodical", self.restart) else: - self.manager.removeEvent("periodical", doRestart) + self.removeEvent("periodical", self.restart) - def doRestart(self): - now = time() - lastrstime = self.getInfo("lastrstime") + def checkFailed_i(self): + now = time.time() + lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 - timer = self.getInfo("timer") - newtimer = 0 - value = False + timerflag = self.info["timerflag"] if now >= lastrstime + interval: self.restart() - self.info["lastrstime"] = now - value = True - else: - newtimer = 1 - if newtimer != timer: - setTimer(newtimer, interval) - return value + elif not timerflag: + self.setTimer(True, interval) - def checkFailed(self, pyfile): - curr = self.getInfo("dlfailed") + def checkFailed_n(self): + curr = self.info["dlfailed"] max = self.getConfig("dlFail_n") if curr >= max: - doRestart() + self.checkFailed_i() else: self.info["dlfailed"] = curr + 1 - def arrangeChecks(self): - self.info["dlfailed"] = 1000 - if self.getInfo("timer"): - setTimer(0, 60) + def checkFailed(self, pyfile): + status = pygile.getStatusName() + if status == "failed" or status == "aborted": + self.checkFailed_n() + + def addEvent(self, event, handler): + self.manager.addEvent(event, handler) + return True - def configEvents(self): + def removeEvent(self, event, handler): + if event in self.manager.events and handler in self.manager.events[event]: + self.manager.events[event].remove(handler) + return True + else: + return False + + def on_allDownloadsProcessed(self): + self.restart() + + def on_downloadStart(self, pyfile): + self.removeEvent("downloadStarts", self.on_downloadStart) + self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) + + def on_allDownloadsFinished(self): + self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) + self.addEvent("downloadStarts", self.on_downloadStart) + + def on_afterReconnecting(self, ip): + self.restart() + + def configEvents(self, plugin, name, value): if self.getConfig("dlFail"): - self.manager.addEvent("downloadFailed", checkFailed) + self.addEvent("downloadFinished", self.checkFailed) else: - self.manager.removeEvent("downloadFailed", checkFailed) - self.arrangeChecks() - if self.getConfig("pkFinish"): - self.manager.addEvent("packageFinished", restart) + self.removeEvent("downloadFinished", self.checkFailed) + self.resetCounters() + if self.getConfig("dlPrcs"): + self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) + self.addEvent("allDownloadsFinished", self.on_allDownloadsFinished) else: - self.manager.removeEvent("packageFinished", restart) + if not self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed): + self.removeEvent("downloadStarts", self.on_downloadStart) + self.removeEvent("allDownloadsFinished", self.on_allDownloadsFinished) if self.getConfig("recnt"): - self.manager.addEvent("afterReconnecting", restart) + self.addEvent("afterReconnecting", self.on_afterReconnecting) else: - self.manager.removeEvent("afterReconnecting", restart) + self.removeEvent("afterReconnecting", self.on_afterReconnecting) def setup(self): - self.info = {"dlfailed": 0, "lastrstime": 0, "timer": 0} - self.configEvents() + self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} + if self.getConfig("rsLoad"): + self.restart() + self.configEvents(None, None, None) -- cgit v1.2.3 From 953de446a67e91ff44434df78f92297ca7091328 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 11 May 2013 01:12:36 +0200 Subject: Version 1.1: fixes --- module/plugins/hooks/RestartFailed.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 273bb2910..3a69ae8c2 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -18,13 +18,13 @@ """ from module.plugins.Hook import Hook -import time +from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.0" - __description__ = "Automatically restart failed/aborted downloads according to defined rules" + __version__ = "1.1" + __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), ("dlFail", "bool", "Restart when download fail", "True"), @@ -79,7 +79,7 @@ class RestartFailed(Hook): self.info["dlfailed"] = curr + 1 def checkFailed(self, pyfile): - status = pygile.getStatusName() + status = pyfile.getStatusName() if status == "failed" or status == "aborted": self.checkFailed_n() @@ -130,4 +130,3 @@ class RestartFailed(Hook): self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} if self.getConfig("rsLoad"): self.restart() - self.configEvents(None, None, None) -- cgit v1.2.3 From f581c00bd7848cf9f6c07373f61e105099fa1515 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sun, 12 May 2013 12:45:18 +0200 Subject: Version 1.2: all issues fixed + improved code --- module/plugins/hooks/RestartFailed.py | 82 ++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 36 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 3a69ae8c2..b4987bc06 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,12 +23,12 @@ from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.1" + __version__ = "1.2" __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), ("dlFail", "bool", "Restart when download fail", "True"), - ("dlFail_n", "int", "Only when failed/aborted downloads are at least", "5"), + ("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"), @@ -37,21 +37,21 @@ class RestartFailed(Hook): __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - event_map = {"pluginConfigChanged": "configEvents"} - def resetCounters(self): + # self.logDebug("self.resetCounters") self.info["dlfailed"] = 0 if self.info["timerflag"]: self.setTimer(False, None) def restart(self): - now = time.time() + now = time() self.resetCounters() self.core.api.restartFailed() - self.logDebug("called self.core.api.restartFailed()") + self.logDebug("self.restart: self.core.api.restartFailed") self.info["lastrstime"] = now def setTimer(self, timerflag, interval): + # self.logDebug("self.setTimer") self.info["timerflag"] = timerflag if interval and interval != self.interval: self.interval = interval @@ -61,7 +61,8 @@ class RestartFailed(Hook): self.removeEvent("periodical", self.restart) def checkFailed_i(self): - now = time.time() + #self.logDebug("self.checkFailed_i") + now = time() lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 timerflag = self.info["timerflag"] @@ -71,62 +72,71 @@ class RestartFailed(Hook): self.setTimer(True, interval) def checkFailed_n(self): + # self.logDebug("self.checkFailed_n") curr = self.info["dlfailed"] max = self.getConfig("dlFail_n") if curr >= max: self.checkFailed_i() - else: - self.info["dlfailed"] = curr + 1 def checkFailed(self, pyfile): - status = pyfile.getStatusName() - if status == "failed" or status == "aborted": - self.checkFailed_n() + # self.logDebug("self.checkFailed") + self.info["dlfailed"] += 1 + self.checkFailed_n() def addEvent(self, event, handler): - self.manager.addEvent(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 + " event: added handler") + else: + # self.logDebug("self.addEvent: " + event + " event: NOT added handler") + return False + else: + self.manager.events[event] = [handler] + # self.logDebug("self.addEvent: " + event + " 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 + " event: removed handler") return True else: + # self.logDebug("self.removeEvent: " + event + " event: NOT removed handler") return False - def on_allDownloadsProcessed(self): - self.restart() - - def on_downloadStart(self, pyfile): - self.removeEvent("downloadStarts", self.on_downloadStart) - self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) - - def on_allDownloadsFinished(self): - self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) - self.addEvent("downloadStarts", self.on_downloadStart) - - def on_afterReconnecting(self, ip): + def onAfterReconnecting(self, ip): + # self.logDebug("self.onAfterReconnecting") self.restart() def configEvents(self, plugin, name, value): + # self.logDebug("self.configEvents") if self.getConfig("dlFail"): - self.addEvent("downloadFinished", self.checkFailed) + self.addEvent("downloadFailed", self.checkFailed) else: - self.removeEvent("downloadFinished", self.checkFailed) + self.removeEvent("downloadFailed", self.checkFailed) self.resetCounters() if self.getConfig("dlPrcs"): - self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) - self.addEvent("allDownloadsFinished", self.on_allDownloadsFinished) + self.addEvent("allDownloadsProcessed", self.restart) else: - if not self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed): - self.removeEvent("downloadStarts", self.on_downloadStart) - self.removeEvent("allDownloadsFinished", self.on_allDownloadsFinished) + self.removeEvent("allDownloadsProcessed", self.restart) if self.getConfig("recnt"): - self.addEvent("afterReconnecting", self.on_afterReconnecting) + self.addEvent("afterReconnecting", self.onAfterReconnecting) else: - self.removeEvent("afterReconnecting", self.on_afterReconnecting) - - def setup(self): + self.removeEvent("afterReconnecting", self.onAfterReconnecting) + + def unload(self): + # self.logDebug("self.unload") + self.removeEvent("pluginConfigChanged", self.configEvents) + self.removeEvent("periodical", self.restart) + self.removeEvent("downloadFailed", self.checkFailed) + self.removeEvent("allDownloadsProcessed", self.restart) + self.removeEvent("afterReconnecting", self.onAfterReconnecting) + + def coreReady(self): + # self.logDebug("self.coreReady") self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} if self.getConfig("rsLoad"): self.restart() + self.addEvent("pluginConfigChanged", self.configEvents) + self.configEvents(None, None, None) -- cgit v1.2.3 From 128ff392cd10550d592a54f6c8d60896dd598bde Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sun, 12 May 2013 14:53:42 +0200 Subject: Version 1.3: improved code --- module/plugins/hooks/RestartFailed.py | 54 ++++++++++++++++------------------- 1 file changed, 24 insertions(+), 30 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index b4987bc06..fba1c5889 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.2" + __version__ = "1.3" __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -37,39 +37,33 @@ class RestartFailed(Hook): __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - def resetCounters(self): - # self.logDebug("self.resetCounters") - self.info["dlfailed"] = 0 - if self.info["timerflag"]: - self.setTimer(False, None) + def setInterval(self, interval): + # self.logDebug("self.setInterval") + if interval != self.interval: + self.interval = interval def restart(self): - now = time() - self.resetCounters() + # self.logDebug("self.restart") + self.setInterval(0) + self.info["dlfailed"] = 0 self.core.api.restartFailed() self.logDebug("self.restart: self.core.api.restartFailed") + now = time() self.info["lastrstime"] = now - def setTimer(self, timerflag, interval): - # self.logDebug("self.setTimer") - self.info["timerflag"] = timerflag - if interval and interval != self.interval: - self.interval = interval - if timerflag: - self.addEvent("periodical", self.restart) - else: - self.removeEvent("periodical", self.restart) + def periodical(self): + # self.logDebug("self.periodical") + self.restart() def checkFailed_i(self): - #self.logDebug("self.checkFailed_i") + # self.logDebug("self.checkFailed_i") now = time() lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 - timerflag = self.info["timerflag"] - if now >= lastrstime + interval: + if now < lastrstime + interval: + self.setInterval(interval) + else: self.restart() - elif not timerflag: - self.setTimer(True, interval) def checkFailed_n(self): # self.logDebug("self.checkFailed_n") @@ -87,22 +81,22 @@ class RestartFailed(Hook): 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 + " event: added handler") + # self.logDebug("self.addEvent: " + event + ": added handler") else: - # self.logDebug("self.addEvent: " + event + " event: NOT added handler") + # self.logDebug("self.addEvent: " + event + ": NOT added handler") return False else: self.manager.events[event] = [handler] - # self.logDebug("self.addEvent: " + event + " event: added event and 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 + " event: removed handler") + # self.logDebug("self.removeEvent: " + event + ": removed handler") return True else: - # self.logDebug("self.removeEvent: " + event + " event: NOT removed handler") + # self.logDebug("self.removeEvent: " + event + ": NOT removed handler") return False def onAfterReconnecting(self, ip): @@ -115,7 +109,7 @@ class RestartFailed(Hook): self.addEvent("downloadFailed", self.checkFailed) else: self.removeEvent("downloadFailed", self.checkFailed) - self.resetCounters() + self.setInterval(0) if self.getConfig("dlPrcs"): self.addEvent("allDownloadsProcessed", self.restart) else: @@ -128,14 +122,14 @@ class RestartFailed(Hook): def unload(self): # self.logDebug("self.unload") self.removeEvent("pluginConfigChanged", self.configEvents) - self.removeEvent("periodical", self.restart) + self.setInterval(0) self.removeEvent("downloadFailed", self.checkFailed) self.removeEvent("allDownloadsProcessed", self.restart) self.removeEvent("afterReconnecting", self.onAfterReconnecting) def coreReady(self): # self.logDebug("self.coreReady") - self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} + self.info = {"dlfailed": 0, "lastrstime": 0} if self.getConfig("rsLoad"): self.restart() self.addEvent("pluginConfigChanged", self.configEvents) -- cgit v1.2.3 From 0d76c92ebf0b4b4188b961e956ed187fc996b043 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sun, 12 May 2013 14:51:14 +0200 Subject: Version 0.3: rewrited code and added new feature "Sleep mode" --- module/plugins/hooks/DeleteFinished.py | 69 +++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 14 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py index be83d6ced..d5b4d3345 100644 --- a/module/plugins/hooks/DeleteFinished.py +++ b/module/plugins/hooks/DeleteFinished.py @@ -23,25 +23,66 @@ from time import time class DeleteFinished(Hook): __name__ = "DeleteFinished" - __version__ = "0.2" + __version__ = "0.3" __description__ = "Automatically delete finished packages from queue" __config__ = [ ("activated", "bool", "Activated", "False"), - ("interval", "int", "Delete every (hours)", "72") + ("interval", "int", "Delete every (hours)", "72"), + ("sleep", "bool", "Sleep mode (useful if interval is small)", "False") ] __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - #: event_map don't load periodical anyway def periodical(self): - now = time() - deletetime = self.getConfig("interval") * 3600 + self.info["lastdelete"] - if now >= deletetime: - self.core.api.deleteFinished() - self.logDebug("called self.core.api.deleteFinished()") - self.info["lastdelete"] = now - - def setup(self): - now = time() - self.info = {"lastdelete": now} - self.interval = 3600 + # self.logDebug("self.periodical") + self.core.api.deleteFinished() + self.logDebug("called self.core.api.deleteFinished") + if self.getConfig("sleep"): + self.interval = 0 + + 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 enPeriodical(self): + # self.logDebug("self.enPeriodical") + if not self.interval: + self.interval = self.getConfig("interval") * 3600 + + def configEvents(self, plugin, name, value): + # self.logDebug("self.configEvents") + self.enPeriodical() + if self.getConfig("sleep"): + self.addEvent("packageFinished", self.enPeriodical) + else: + self.removeEvent("packageFinished", self.enPeriodical) + + def unload(self): + # self.logDebug("self.unload") + self.removeEvent("pluginConfigChanged", self.configEvents) + self.removeEvent("packageFinished", self.enPeriodical) + self.interval = 0 + + def coreReady(self): + # self.logDebug("self.coreReady") + self.interval = 0 + self.addEvent("pluginConfigChanged", self.configEvents) + self.configEvents(None, None, None) -- cgit v1.2.3 From 8d8ff424c48345c8b2ad222cda58cd78a7de5282 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sun, 12 May 2013 21:36:56 +0200 Subject: Version 0.5: finished rewrite --- module/plugins/hooks/DeleteFinished.py | 42 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py index d5b4d3345..e0df69eef 100644 --- a/module/plugins/hooks/DeleteFinished.py +++ b/module/plugins/hooks/DeleteFinished.py @@ -23,22 +23,27 @@ from time import time class DeleteFinished(Hook): __name__ = "DeleteFinished" - __version__ = "0.3" + __version__ = "0.5" __description__ = "Automatically delete finished packages from queue" __config__ = [ ("activated", "bool", "Activated", "False"), - ("interval", "int", "Delete every (hours)", "72"), - ("sleep", "bool", "Sleep mode (useful if interval is small)", "False") + ("interval", "int", "Delete every (hours)", "72") ] __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") + def wakeup(self, pypack): + # self.logDebug("self.wakeup") + self.removeEvent("packageFinished", self.wakeup) + self.info["sleep"] = False + def periodical(self): # self.logDebug("self.periodical") - self.core.api.deleteFinished() - self.logDebug("called self.core.api.deleteFinished") - if self.getConfig("sleep"): - self.interval = 0 + if not self.info["sleep"]: + self.core.api.deleteFinished() + self.logDebug("called self.core.api.deleteFinished") + self.info["sleep"] = True + self.addEvent("packageFinished", self.wakeup) def addEvent(self, event, handler): if event in self.manager.events: @@ -62,27 +67,20 @@ class DeleteFinished(Hook): # self.logDebug("self.removeEvent: " + event + ": NOT removed handler") return False - def enPeriodical(self): - # self.logDebug("self.enPeriodical") - if not self.interval: - self.interval = self.getConfig("interval") * 3600 - - def configEvents(self, plugin, name, value): + def configEvents(self, plugin=None, name=None, value=None): # self.logDebug("self.configEvents") - self.enPeriodical() - if self.getConfig("sleep"): - self.addEvent("packageFinished", self.enPeriodical) - else: - self.removeEvent("packageFinished", self.enPeriodical) + interval = self.getConfig("interval") * 3600 + if interval != self.interval: + self.interval = interval def unload(self): # self.logDebug("self.unload") self.removeEvent("pluginConfigChanged", self.configEvents) - self.removeEvent("packageFinished", self.enPeriodical) - self.interval = 0 + self.removeEvent("packageFinished", self.wakeup) def coreReady(self): # self.logDebug("self.coreReady") - self.interval = 0 + self.info = {"sleep": True} self.addEvent("pluginConfigChanged", self.configEvents) - self.configEvents(None, None, None) + self.configEvents() + self.addEvent("packageFinished", self.wakeup) -- cgit v1.2.3 From fd97c96e2070bb96cdef8058564e739bc68eebae Mon Sep 17 00:00:00 2001 From: Vuolter Date: Mon, 13 May 2013 00:06:17 +0200 Subject: Version 1.5: first really stable release --- module/plugins/hooks/RestartFailed.py | 74 +++++++++++++++-------------------- 1 file changed, 31 insertions(+), 43 deletions(-) (limited to 'module/plugins/hooks') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index fba1c5889..7ee53deb9 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.3" + __version__ = "1.5" __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -37,45 +37,36 @@ class RestartFailed(Hook): __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - def setInterval(self, interval): - # self.logDebug("self.setInterval") - if interval != self.interval: - self.interval = interval - - def restart(self): + def restart(self, arg=None): # self.logDebug("self.restart") - self.setInterval(0) + self.info["timerflag"] = False self.info["dlfailed"] = 0 self.core.api.restartFailed() self.logDebug("self.restart: self.core.api.restartFailed") - now = time() - self.info["lastrstime"] = now + self.info["lastrstime"] = time() def periodical(self): # self.logDebug("self.periodical") - self.restart() + if self.info["timerflag"]: + self.restart() - def checkFailed_i(self): - # self.logDebug("self.checkFailed_i") + 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.setInterval(interval) + self.info["timerflag"] = True else: self.restart() - def checkFailed_n(self): - # self.logDebug("self.checkFailed_n") - curr = self.info["dlfailed"] - max = self.getConfig("dlFail_n") - if curr >= max: - self.checkFailed_i() - def checkFailed(self, pyfile): # self.logDebug("self.checkFailed") self.info["dlfailed"] += 1 - self.checkFailed_n() + 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: @@ -99,38 +90,35 @@ class RestartFailed(Hook): # self.logDebug("self.removeEvent: " + event + ": NOT removed handler") return False - def onAfterReconnecting(self, ip): - # self.logDebug("self.onAfterReconnecting") - self.restart() - - def configEvents(self, plugin, name, value): + def configEvents(self, plugin=None, name=None, value=None): # self.logDebug("self.configEvents") - if self.getConfig("dlFail"): - self.addEvent("downloadFailed", self.checkFailed) - else: - self.removeEvent("downloadFailed", self.checkFailed) - self.setInterval(0) - if self.getConfig("dlPrcs"): - self.addEvent("allDownloadsProcessed", self.restart) + 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.restart) - if self.getConfig("recnt"): - self.addEvent("afterReconnecting", self.onAfterReconnecting) + self.removeEvent("allDownloadsProcessed", self.checkInterval) + if not dlFail: + self.info["timerflag"] = False + if recnt: + self.addEvent("afterReconnecting", self.restart) else: - self.removeEvent("afterReconnecting", self.onAfterReconnecting) + self.removeEvent("afterReconnecting", self.restart) def unload(self): # self.logDebug("self.unload") self.removeEvent("pluginConfigChanged", self.configEvents) - self.setInterval(0) self.removeEvent("downloadFailed", self.checkFailed) - self.removeEvent("allDownloadsProcessed", self.restart) - self.removeEvent("afterReconnecting", self.onAfterReconnecting) + self.removeEvent("allDownloadsProcessed", self.checkInterval) + self.removeEvent("afterReconnecting", self.restart) def coreReady(self): # self.logDebug("self.coreReady") - self.info = {"dlfailed": 0, "lastrstime": 0} + 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(None, None, None) + self.configEvents() -- cgit v1.2.3 From e5a6c25ed0f99375d00af67d32982cceede64bfe Mon Sep 17 00:00:00 2001 From: stefanos Date: Fri, 17 May 2013 06:05:14 +0300 Subject: Update Captcha9kw.py prio, captcha per hour, max. timeout to 9kw with faster check (every second, max. timeout is unchanged => setWaiting), confirm captcha and https --- module/plugins/hooks/Captcha9kw.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'module/plugins/hooks') 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 != ""): -- cgit v1.2.3