summaryrefslogtreecommitdiffstats
path: root/module/plugins/internal
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@users.noreply.github.com> 2015-03-18 22:16:38 +0100
committerGravatar Walter Purcaro <vuolter@users.noreply.github.com> 2015-03-18 22:16:38 +0100
commite19feb3a3b961d3e1f1a86f2366c3b71c85bc8db (patch)
tree2f5ee81dcfd6dc444a8f68eed797d44fe128d7d4 /module/plugins/internal
parent[SimpleHoster] retryFree feature (diff)
downloadpyload-e19feb3a3b961d3e1f1a86f2366c3b71c85bc8db.tar.xz
[MultiHoster] Fix revertfailed feature
Diffstat (limited to 'module/plugins/internal')
-rw-r--r--module/plugins/internal/MultiHook.py41
-rw-r--r--module/plugins/internal/MultiHoster.py66
2 files changed, 54 insertions, 53 deletions
diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py
index 35bb9c65d..9ba1fc2c8 100644
--- a/module/plugins/internal/MultiHook.py
+++ b/module/plugins/internal/MultiHook.py
@@ -10,15 +10,12 @@ from module.utils import decode, remove_chars
class MultiHook(Hook):
__name__ = "MultiHook"
__type__ = "hook"
- __version__ = "0.39"
+ __version__ = "0.40"
- __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
- ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
- ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
- ("retry" , "int" , "Number of retries before revert" , 10 ),
- ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
- ("reload" , "bool" , "Reload plugin list" , True ),
- ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)", "" ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Hook plugin for multi hoster/crypter"""
__license__ = "GPLv3"
@@ -135,7 +132,7 @@ class MultiHook(Hook):
self.logDebug(e, "Waiting 1 minute and retry")
time.sleep(60)
else:
- self.logWarning(_("Fallback to default reload interval due plugin"))
+ self.logWarning(_("Fallback to default reload interval due plugin parse error"))
self.interval = self.MIN_RELOAD_INTERVAL
return list()
@@ -299,29 +296,3 @@ class MultiHook(Hook):
hdict['pattern'] = getattr(self.pluginclass, "__pattern__", r'^unmatchable$')
hdict['re'] = re.compile(hdict['pattern'])
-
-
- def downloadFailed(self, pyfile):
- """remove plugin override if download fails but not if file is offline/temp.offline"""
- if pyfile.status != 8 or not self.getConfig("revertfailed", True):
- return
-
- hdict = self.core.pluginManager.plugins[self.plugintype][pyfile.pluginname]
- if "new_name" in hdict and hdict['new_name'] == self.pluginname:
- if pyfile.error == "MultiHook":
- self.logDebug("Unload MultiHook", pyfile.pluginname, hdict)
- self.unloadPlugin(pyfile.pluginname)
- pyfile.setStatus("queued")
- pyfile.sync()
- else:
- retries = max(self.getConfig("retry", 10), 0)
- wait_time = max(self.getConfig("retryinterval", 1), 0)
-
- if 0 < retries > pyfile.plugin.retries:
- self.logInfo(_("Retrying: %s") % pyfile.name)
- pyfile.setCustomStatus("MultiHook", "queued")
- pyfile.sync()
-
- pyfile.plugin.retries += 1
- pyfile.plugin.setWait(wait_time)
- pyfile.plugin.wait()
diff --git a/module/plugins/internal/MultiHoster.py b/module/plugins/internal/MultiHoster.py
index 63b7d76b1..fb76c58f4 100644
--- a/module/plugins/internal/MultiHoster.py
+++ b/module/plugins/internal/MultiHoster.py
@@ -2,15 +2,18 @@
import re
+from module.plugins.Plugin import Fail, Retry
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, replace_patterns, set_cookies
class MultiHoster(SimpleHoster):
__name__ = "MultiHoster"
__type__ = "hoster"
- __version__ = "0.37"
+ __version__ = "0.38"
__pattern__ = r'^unmatchable$'
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("revertfailed", "bool", "Revert to standard download if fails", True)]
__description__ = """Multi hoster plugin"""
__license__ = "GPLv3"
@@ -32,6 +35,9 @@ class MultiHoster(SimpleHoster):
self.link = "" #@TODO: Move to hoster class in 0.4.10
self.directDL = False #@TODO: Move to hoster class in 0.4.10
+ if not self.getConfig('use_premium', True):
+ self.retryFree()
+
if self.LOGIN_ACCOUNT and not self.account:
self.fail(_("Required account not found"))
@@ -49,29 +55,53 @@ class MultiHoster(SimpleHoster):
def process(self, pyfile):
- self.prepare()
+ try:
+ self.prepare()
+
+ if self.directDL:
+ self.checkInfo()
+ self.logDebug("Looking for direct download link...")
+ self.handleDirect(pyfile)
+
+ if not self.link and not self.lastDownload:
+ self.preload()
+
+ self.checkErrors()
+ self.checkStatus(getinfo=False)
+
+ if self.premium and (not self.CHECK_TRAFFIC or self.checkTrafficLeft()):
+ self.logDebug("Handled as premium download")
+ self.handlePremium(pyfile)
+
+ elif not self.LOGIN_ACCOUNT or (not self.CHECK_TRAFFIC or self.checkTrafficLeft()):
+ self.logDebug("Handled as free download")
+ self.handleFree(pyfile)
+
+ self.downloadLink(self.link, True)
+ self.checkFile()
+
+ except Fail, e: #@TODO: Move to PluginThread in 0.4.10
+ if self.premium:
+ self.retryFree()
- if self.directDL:
- self.checkInfo()
- self.logDebug("Looking for direct download link...")
- self.handleDirect(pyfile)
+ elif self.getConfig("revertfailed", True) \
+ and "new_module" in self.core.pluginManager.hosterPlugins[self.__name__]:
+ hdict = self.core.pluginManager.hosterPlugins[self.__name__]
- if not self.link and not self.lastDownload:
- self.preload()
+ tmp_module = hdict['new_module']
+ tmp_name = hdict['new_name']
+ hdict.pop('new_module', None)
+ hdict.pop('new_name', None)
- self.checkErrors()
- self.checkStatus(getinfo=False)
+ pyfile.initPlugin()
- if self.premium and (not self.CHECK_TRAFFIC or self.checkTrafficLeft()):
- self.logDebug("Handled as premium download")
- self.handlePremium(pyfile)
+ hdict['new_module'] = tmp_module
+ hdict['new_name'] = tmp_name
- elif not self.LOGIN_ACCOUNT or (not self.CHECK_TRAFFIC or self.checkTrafficLeft()):
- self.logDebug("Handled as free download")
- self.handleFree(pyfile)
+ raise Retry(_("Revert to original hoster plugin"))
- self.downloadLink(self.link, True)
- self.checkFile()
+ else:
+ raise Fail(e)
def handlePremium(self, pyfile):