diff options
| author | 2015-03-18 22:16:38 +0100 | |
|---|---|---|
| committer | 2015-03-18 22:16:38 +0100 | |
| commit | e19feb3a3b961d3e1f1a86f2366c3b71c85bc8db (patch) | |
| tree | 2f5ee81dcfd6dc444a8f68eed797d44fe128d7d4 /module | |
| parent | [SimpleHoster] retryFree feature (diff) | |
| download | pyload-e19feb3a3b961d3e1f1a86f2366c3b71c85bc8db.tar.xz | |
[MultiHoster] Fix revertfailed feature
Diffstat (limited to 'module')
| -rw-r--r-- | module/plugins/internal/MultiHook.py | 41 | ||||
| -rw-r--r-- | module/plugins/internal/MultiHoster.py | 66 | 
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): | 
