From 57a319563651a07bf8265ab52da0d7375191319c Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Tue, 23 Dec 2014 13:13:42 +0100 Subject: Rename MultiHoster plugin to MultiHook --- module/plugins/internal/MultiHook.py | 217 +++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 module/plugins/internal/MultiHook.py (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py new file mode 100644 index 000000000..dcf1c3383 --- /dev/null +++ b/module/plugins/internal/MultiHook.py @@ -0,0 +1,217 @@ +# -*- coding: utf-8 -*- + +import re + +from module.plugins.Hook import Hook +from module.utils import remove_chars + + +class MultiHook(Hook): + __name__ = "MultiHook" + __type__ = "hook" + __version__ = "0.22" + + __description__ = """Hook plugin for MultiHoster""" + __license__ = "GPLv3" + __authors__ = [("pyLoad Team", "admin@pyload.org")] + + + interval = 12 * 60 * 60 #: reload hosters every 12h + + HOSTER_REPLACEMENTS = [("1fichier.com" , "onefichier.com"), + ("2shared.com" , "twoshared.com" ), + ("4shared.com" , "fourshared.com"), + ("cloudnator.com" , "shragle.com" ), + ("easy-share.com" , "crocko.com" ), + ("fileparadox.com", "fileparadox.in"), + ("freakshare.net" , "freakshare.com"), + ("hellshare.com" , "hellshare.cz" ), + ("ifile.it" , "filecloud.io" ), + ("nowdownload.ch" , "nowdownload.sx"), + ("nowvideo.co" , "nowvideo.sx" ), + ("putlocker.com" , "firedrive.com" ), + ("share-rapid.cz" , "multishare.cz" ), + ("sharerapid.cz" , "multishare.cz" ), + ("ul.to" , "uploaded.to" ), + ("uploaded.net" , "uploaded.to" )] + HOSTER_EXCLUDED = [] + + + def setup(self): + self.hosters = [] + self.supported = [] + self.new_supported = [] + + + def getConfig(self, option, default=''): + """getConfig with default value - sublass may not implements all config options""" + try: + return self.getConf(option) + except KeyError: + return default + + + def getHosterCached(self): + if not self.hosters: + try: + hosterSet = self.toHosterSet(self.getHoster()) - set(self.HOSTER_EXCLUDED) + except Exception, e: + self.logError(e) + return [] + + try: + configMode = self.getConfig('hosterListMode', 'all') + if configMode in ("listed", "unlisted"): + configSet = self.toHosterSet(self.getConfig('hosterList', '').replace('|', ',').replace(';', ',').split(',')) + + if configMode == "listed": + hosterSet &= configSet + else: + hosterSet -= configSet + + except Exception, e: + self.logError(e) + + self.hosters = list(hosterSet) + + return self.hosters + + + def toHosterSet(self, hosters): + hosters = set((str(x).strip().lower() for x in hosters)) + + for rep in self.HOSTER_REPLACEMENTS: + if rep[0] in hosters: + hosters.remove(rep[0]) + hosters.add(rep[1]) + + hosters.discard('') + return hosters + + + def getHoster(self): + """Load list of supported hoster + + :return: List of domain names + """ + raise NotImplementedError + + + def coreReady(self): + if self.cb: + self.core.scheduler.removeJob(self.cb) + + self.setConfig("activated", True) #: config not in sync after plugin reload + + cfg_interval = self.getConfig("interval", None) #: reload interval in hours + if cfg_interval is not None: + self.interval = cfg_interval * 60 * 60 + + if self.interval: + self._periodical() + else: + self.periodical() + + + def initPeriodical(self): + pass + + + def periodical(self): + """reload hoster list periodically""" + self.logInfo(_("Reloading supported hoster list")) + + old_supported = self.supported + self.supported = [] + self.new_supported = [] + self.hosters = [] + + self.overridePlugins() + + old_supported = [hoster for hoster in old_supported if hoster not in self.supported] + if old_supported: + self.logDebug("UNLOAD", ", ".join(old_supported)) + for hoster in old_supported: + self.unloadHoster(hoster) + + + def overridePlugins(self): + pluginMap = dict((name.lower(), name) for name in self.core.pluginManager.hosterPlugins.iterkeys()) + accountList = [name.lower() for name, data in self.core.accountManager.accounts.iteritems() if data] + excludedList = [] + + for hoster in self.getHosterCached(): + name = remove_chars(hoster, "-.") + + if name in accountList: + excludedList.append(hoster) + else: + if name in pluginMap: + self.supported.append(pluginMap[name]) + else: + self.new_supported.append(hoster) + + if not self.supported and not self.new_supported: + self.logError(_("No Hoster loaded")) + return + + module = self.core.pluginManager.getPlugin(self.__name__) + klass = getattr(module, self.__name__) + + # inject plugin plugin + self.logDebug("Overwritten Hosters", ", ".join(sorted(self.supported))) + for hoster in self.supported: + hdict = self.core.pluginManager.hosterPlugins[hoster] + hdict['new_module'] = module + hdict['new_name'] = self.__name__ + + if excludedList: + self.logInfo(_("The following hosters were not overwritten - account exists"), ", ".join(sorted(excludedList))) + + if self.new_supported: + hosters = sorted(self.new_supported) + + self.logDebug("New Hosters", ", ".join(hosters)) + + # create new regexp + regexp = r'.*(%s).*' % "|".join([x.replace(".", "\.") for x in hosters]) + if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__: + regexp = r'%s|%s' % (klass.__pattern__, regexp) + + self.logDebug("Regexp", regexp) + + hdict = self.core.pluginManager.hosterPlugins[self.__name__] + hdict['pattern'] = regexp + hdict['re'] = re.compile(regexp) + + + def unloadHoster(self, hoster): + hdict = self.core.pluginManager.hosterPlugins[hoster] + if "module" in hdict: + del hdict['module'] + + if "new_module" in hdict: + del hdict['new_module'] + del hdict['new_name'] + + + def unload(self): + """Remove override for all hosters. Scheduler job is removed by hookmanager""" + for hoster in self.supported: + self.unloadHoster(hoster) + + # reset pattern + klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__) + hdict = self.core.pluginManager.hosterPlugins[self.__name__] + hdict['pattern'] = getattr(klass, "__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.hasStatus("failed") and self.getConfig("unloadFailing", True): + hdict = self.core.pluginManager.hosterPlugins[pyfile.pluginname] + if "new_name" in hdict and hdict['new_name'] == self.__name__: + self.logDebug("Unload MultiHook", pyfile.pluginname, hdict) + self.unloadHoster(pyfile.pluginname) + pyfile.setStatus("queued") -- cgit v1.2.3 From 6d3b96012ba64343586ba53041650d93493a335c Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Fri, 26 Dec 2014 04:23:45 +0100 Subject: [MultiHook] Overwrites account if not premium --- module/plugins/internal/MultiHook.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index dcf1c3383..caac6c258 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.22" + __version__ = "0.23" __description__ = """Hook plugin for MultiHoster""" __license__ = "GPLv3" @@ -130,14 +130,14 @@ class MultiHook(Hook): old_supported = [hoster for hoster in old_supported if hoster not in self.supported] if old_supported: - self.logDebug("UNLOAD", ", ".join(old_supported)) + self.logDebug("Unload: %s" % ", ".join(old_supported)) for hoster in old_supported: self.unloadHoster(hoster) def overridePlugins(self): pluginMap = dict((name.lower(), name) for name in self.core.pluginManager.hosterPlugins.iterkeys()) - accountList = [name.lower() for name, data in self.core.accountManager.accounts.iteritems() if data] + accountList = [account.type.lower() for account in self.core.api.getAccounts(False) if account.valid and account.premium] excludedList = [] for hoster in self.getHosterCached(): @@ -159,26 +159,26 @@ class MultiHook(Hook): klass = getattr(module, self.__name__) # inject plugin plugin - self.logDebug("Overwritten Hosters", ", ".join(sorted(self.supported))) + self.logDebug("Overwritten Hosters: %s" % ", ".join(sorted(self.supported))) for hoster in self.supported: hdict = self.core.pluginManager.hosterPlugins[hoster] hdict['new_module'] = module hdict['new_name'] = self.__name__ if excludedList: - self.logInfo(_("The following hosters were not overwritten - account exists"), ", ".join(sorted(excludedList))) + self.logInfo(_("Hosters not overwritten: %s" % ", ".join(sorted(excludedList)))) if self.new_supported: hosters = sorted(self.new_supported) - self.logDebug("New Hosters", ", ".join(hosters)) + self.logDebug("New Hosters: %s" % ", ".join(hosters)) # create new regexp regexp = r'.*(%s).*' % "|".join([x.replace(".", "\.") for x in hosters]) if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__: regexp = r'%s|%s' % (klass.__pattern__, regexp) - self.logDebug("Regexp", regexp) + self.logDebug("Regexp: %s" % regexp) hdict = self.core.pluginManager.hosterPlugins[self.__name__] hdict['pattern'] = regexp -- cgit v1.2.3 From ff42cec46274b0f2019272424c1a57ec4b413507 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Fri, 26 Dec 2014 17:58:54 +0100 Subject: [PremiumTo] Fixup --- module/plugins/internal/MultiHook.py | 1 + 1 file changed, 1 insertion(+) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index caac6c258..78de1ed0a 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -47,6 +47,7 @@ class MultiHook(Hook): """getConfig with default value - sublass may not implements all config options""" try: return self.getConf(option) + except KeyError: return default -- cgit v1.2.3 From b72be64cc16660e3ba877d97dbc0e717bb030666 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 27 Dec 2014 21:14:40 +0100 Subject: [MultiHook] Crypter support --- module/plugins/internal/MultiHook.py | 150 +++++++++++++++++++---------------- 1 file changed, 83 insertions(+), 67 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 78de1ed0a..cf251bacf 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,16 +9,22 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.23" + __version__ = "0.25" - __description__ = """Hook plugin for MultiHoster""" + __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"), + ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), + ("revertfailed", "bool" , "Revert to standard download if download fails", False), + ("interval" , "int" , "Reload interval in hours (0 to disable)" , 12 )] + + __description__ = """Hook plugin for multi hoster/crypter""" __license__ = "GPLv3" - __authors__ = [("pyLoad Team", "admin@pyload.org")] + __authors__ = [("pyLoad Team", "admin@pyload.org"), + ("Walter Purcaro", "vuolter@gmail.com")] - interval = 12 * 60 * 60 #: reload hosters every 12h + MIN_INTERVAL = 12 * 60 * 60 #: reload plugins every 12h - HOSTER_REPLACEMENTS = [("1fichier.com" , "onefichier.com"), + PLUGIN_REPLACEMENTS = [("1fichier.com" , "onefichier.com"), ("2shared.com" , "twoshared.com" ), ("4shared.com" , "fourshared.com"), ("cloudnator.com" , "shragle.com" ), @@ -34,15 +40,26 @@ class MultiHook(Hook): ("sharerapid.cz" , "multishare.cz" ), ("ul.to" , "uploaded.to" ), ("uploaded.net" , "uploaded.to" )] - HOSTER_EXCLUDED = [] def setup(self): - self.hosters = [] + self.type = self.core.pluginManager.findPlugin(self.__name__)[1] or "hoster" + self.plugins = [] self.supported = [] self.new_supported = [] + def getURL(self, *args, **kwargs): #@TODO: Remove in 0.4.10 + """ see HTTPRequest for argument list """ + h = pyreq.getHTTPRequest(timeout=120) + try: + rep = h.load(*args, **kwargs) + finally: + h.close() + + return rep + + def getConfig(self, option, default=''): """getConfig with default value - sublass may not implements all config options""" try: @@ -52,36 +69,37 @@ class MultiHook(Hook): return default - def getHosterCached(self): - if not self.hosters: + def pluginCached(self): + if not self.plugins: try: - hosterSet = self.toHosterSet(self.getHoster()) - set(self.HOSTER_EXCLUDED) + pluginset = self.pluginSet(self.getHosters() if self.type is "hoster" else self.getCrypters()) except Exception, e: self.logError(e) return [] try: - configMode = self.getConfig('hosterListMode', 'all') - if configMode in ("listed", "unlisted"): - configSet = self.toHosterSet(self.getConfig('hosterList', '').replace('|', ',').replace(';', ',').split(',')) + configmode = self.getConfig("mode", 'all') + if configmode in ("listed", "unlisted"): + list = self.getConfig("pluginlist", '').replace('|', ',').replace(';', ',').split(',') + configset = self.pluginSet(list) - if configMode == "listed": - hosterSet &= configSet + if configmode == "listed": + pluginset &= configset else: - hosterSet -= configSet + pluginset -= configset except Exception, e: self.logError(e) - self.hosters = list(hosterSet) + self.plugins = list(pluginset) - return self.hosters + return self.plugins - def toHosterSet(self, hosters): + def pluginSet(self, hosters): hosters = set((str(x).strip().lower() for x in hosters)) - for rep in self.HOSTER_REPLACEMENTS: + for rep in self.PLUGIN_REPLACEMENTS: if rep[0] in hosters: hosters.remove(rep[0]) hosters.add(rep[1]) @@ -90,7 +108,7 @@ class MultiHook(Hook): return hosters - def getHoster(self): + def getHosters(self): """Load list of supported hoster :return: List of domain names @@ -98,96 +116,93 @@ class MultiHook(Hook): raise NotImplementedError - def coreReady(self): - if self.cb: - self.core.scheduler.removeJob(self.cb) - - self.setConfig("activated", True) #: config not in sync after plugin reload - - cfg_interval = self.getConfig("interval", None) #: reload interval in hours - if cfg_interval is not None: - self.interval = cfg_interval * 60 * 60 - - if self.interval: - self._periodical() - else: - self.periodical() - + def getCrypters(self): + """Load list of supported crypters - def initPeriodical(self): - pass + :return: List of domain names + """ + raise NotImplementedError def periodical(self): - """reload hoster list periodically""" - self.logInfo(_("Reloading supported hoster list")) + """reload plugin list periodically""" + self.interval = max(self.getConfig("interval", 0), self.MIN_INTERVAL) + + self.logInfo(_("Reloading supported %s list") % self.type) old_supported = self.supported self.supported = [] self.new_supported = [] - self.hosters = [] + self.plugins = [] self.overridePlugins() - old_supported = [hoster for hoster in old_supported if hoster not in self.supported] + old_supported = [plugin for plugin in old_supported if plugin not in self.supported] + if old_supported: self.logDebug("Unload: %s" % ", ".join(old_supported)) - for hoster in old_supported: - self.unloadHoster(hoster) + for plugin in old_supported: + self.unloadPlugin(plugin) def overridePlugins(self): - pluginMap = dict((name.lower(), name) for name in self.core.pluginManager.hosterPlugins.iterkeys()) - accountList = [account.type.lower() for account in self.core.api.getAccounts(False) if account.valid and account.premium] excludedList = [] - for hoster in self.getHosterCached(): - name = remove_chars(hoster, "-.") + if self.type is "hoster": + pluginMap = dict((name.lower(), name) for name in self.core.pluginManager.hosterPlugins.iterkeys()) + accountList = [account.type.lower() for account in self.core.api.getAccounts(False) if account.valid and account.premium] + else: + pluginMap = {} + accountList = [name[::-1].replace("Folder"[::-1], "", 1).lower()[::-1] for name in self.core.pluginManager.crypterPlugins.iterkeys()] + + for plugin in self.pluginCached(): + name = remove_chars(plugin, "-.") if name in accountList: - excludedList.append(hoster) + excludedList.append(plugin) else: if name in pluginMap: self.supported.append(pluginMap[name]) else: - self.new_supported.append(hoster) + self.new_supported.append(plugin) if not self.supported and not self.new_supported: - self.logError(_("No Hoster loaded")) + self.logError(_("No %s loaded") % self.type) return module = self.core.pluginManager.getPlugin(self.__name__) klass = getattr(module, self.__name__) # inject plugin plugin - self.logDebug("Overwritten Hosters: %s" % ", ".join(sorted(self.supported))) - for hoster in self.supported: - hdict = self.core.pluginManager.hosterPlugins[hoster] + self.logDebug("Overwritten %ss: %s" % (self.type, ", ".join(sorted(self.supported)))) + + for plugin in self.supported: + hdict = self.core.pluginManager.plugins[self.type][plugin] hdict['new_module'] = module hdict['new_name'] = self.__name__ if excludedList: - self.logInfo(_("Hosters not overwritten: %s" % ", ".join(sorted(excludedList)))) + self.logInfo(_("%ss not overwritten: %s") % (self.type.capitalize(), ", ".join(sorted(excludedList)))) if self.new_supported: - hosters = sorted(self.new_supported) + plugins = sorted(self.new_supported) - self.logDebug("New Hosters: %s" % ", ".join(hosters)) + self.logDebug("New %ss: %s" % (self.type, ", ".join(plugins))) # create new regexp - regexp = r'.*(%s).*' % "|".join([x.replace(".", "\.") for x in hosters]) + regexp = r'.*(%s).*' % "|".join([x.replace(".", "\.") for x in plugins]) if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__: regexp = r'%s|%s' % (klass.__pattern__, regexp) self.logDebug("Regexp: %s" % regexp) - hdict = self.core.pluginManager.hosterPlugins[self.__name__] + hdict = self.core.pluginManager.plugins[self.type][self.__name__] hdict['pattern'] = regexp hdict['re'] = re.compile(regexp) - def unloadHoster(self, hoster): - hdict = self.core.pluginManager.hosterPlugins[hoster] + def unloadPlugin(self, plugin): + hdict = self.core.pluginManager.plugins[self.type][plugin] if "module" in hdict: del hdict['module'] @@ -198,21 +213,22 @@ class MultiHook(Hook): def unload(self): """Remove override for all hosters. Scheduler job is removed by hookmanager""" - for hoster in self.supported: - self.unloadHoster(hoster) + for plugin in self.supported: + self.unloadPlugin(plugin) # reset pattern klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__) - hdict = self.core.pluginManager.hosterPlugins[self.__name__] + hdict = self.core.pluginManager.plugins[self.type][self.__name__] + hdict['pattern'] = getattr(klass, "__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.hasStatus("failed") and self.getConfig("unloadFailing", True): - hdict = self.core.pluginManager.hosterPlugins[pyfile.pluginname] + if self.type is "hoster" and pyfile.hasStatus("failed") and self.getConfig("revertfailed", True): + hdict = self.core.pluginManager.plugins[self.type][pyfile.pluginname] if "new_name" in hdict and hdict['new_name'] == self.__name__: self.logDebug("Unload MultiHook", pyfile.pluginname, hdict) - self.unloadHoster(pyfile.pluginname) + self.unloadPlugin(pyfile.pluginname) pyfile.setStatus("queued") -- cgit v1.2.3 From e4cf98e1f368eb846469d1acaf0efd015bf2a921 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Tue, 30 Dec 2014 15:43:11 +0100 Subject: [MultiHook] Fixup --- module/plugins/internal/MultiHook.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index cf251bacf..8164a02fc 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.25" + __version__ = "0.26" __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -72,7 +72,7 @@ class MultiHook(Hook): def pluginCached(self): if not self.plugins: try: - pluginset = self.pluginSet(self.getHosters() if self.type is "hoster" else self.getCrypters()) + pluginset = self.pluginSet(self.getHosters() if self.type == "hoster" else self.getCrypters()) except Exception, e: self.logError(e) return [] @@ -80,8 +80,8 @@ class MultiHook(Hook): try: configmode = self.getConfig("mode", 'all') if configmode in ("listed", "unlisted"): - list = self.getConfig("pluginlist", '').replace('|', ',').replace(';', ',').split(',') - configset = self.pluginSet(list) + pluginlist = self.getConfig("pluginlist", '').replace('|', ',').replace(';', ',').split(',') + configset = self.pluginSet(pluginlist) if configmode == "listed": pluginset &= configset @@ -96,16 +96,17 @@ class MultiHook(Hook): return self.plugins - def pluginSet(self, hosters): - hosters = set((str(x).strip().lower() for x in hosters)) + def pluginSet(self, plugins): + plugins = set((str(x).strip().lower() for x in plugins)) for rep in self.PLUGIN_REPLACEMENTS: - if rep[0] in hosters: - hosters.remove(rep[0]) - hosters.add(rep[1]) + if rep[0] in plugins: + plugins.remove(rep[0]) + plugins.add(rep[1]) - hosters.discard('') - return hosters + plugins.discard('') + + return plugins def getHosters(self): @@ -148,7 +149,7 @@ class MultiHook(Hook): def overridePlugins(self): excludedList = [] - if self.type is "hoster": + if self.type == "hoster": pluginMap = dict((name.lower(), name) for name in self.core.pluginManager.hosterPlugins.iterkeys()) accountList = [account.type.lower() for account in self.core.api.getAccounts(False) if account.valid and account.premium] else: @@ -212,7 +213,7 @@ class MultiHook(Hook): def unload(self): - """Remove override for all hosters. Scheduler job is removed by hookmanager""" + """Remove override for all plugins. Scheduler job is removed by hookmanager""" for plugin in self.supported: self.unloadPlugin(plugin) @@ -226,7 +227,7 @@ class MultiHook(Hook): def downloadFailed(self, pyfile): """remove plugin override if download fails but not if file is offline/temp.offline""" - if self.type is "hoster" and pyfile.hasStatus("failed") and self.getConfig("revertfailed", True): + if pyfile.hasStatus("failed") and self.getConfig("revertfailed", True): hdict = self.core.pluginManager.plugins[self.type][pyfile.pluginname] if "new_name" in hdict and hdict['new_name'] == self.__name__: self.logDebug("Unload MultiHook", pyfile.pluginname, hdict) -- cgit v1.2.3 From bbf4c9d993d09ea09e6fae04d2fa5ebb8a237385 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Fri, 2 Jan 2015 02:45:22 +0100 Subject: [MultiHook] Store account type --- module/plugins/internal/MultiHook.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 8164a02fc..5cb72677f 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.26" + __version__ = "0.27" __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -49,6 +49,10 @@ class MultiHook(Hook): self.new_supported = [] + def coreReady(self): + self.account = self.core.accountManager.getAccountPlugin(self.__name__) + + def getURL(self, *args, **kwargs): #@TODO: Remove in 0.4.10 """ see HTTPRequest for argument list """ h = pyreq.getHTTPRequest(timeout=120) @@ -131,7 +135,8 @@ class MultiHook(Hook): self.logInfo(_("Reloading supported %s list") % self.type) - old_supported = self.supported + old_supported = self.supported + self.supported = [] self.new_supported = [] self.plugins = [] -- cgit v1.2.3 From 8a79ad6e25210b2ec6ce74bc5b2d55dbe303dbaa Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 3 Jan 2015 02:13:10 +0100 Subject: [MultiHook] Unload if related multihoster account is not available --- module/plugins/internal/MultiHook.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 5cb72677f..b5ac132b7 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.27" + __version__ = "0.28" __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -51,6 +51,8 @@ class MultiHook(Hook): def coreReady(self): self.account = self.core.accountManager.getAccountPlugin(self.__name__) + if not self.account: + self.setConfig('activated', False) def getURL(self, *args, **kwargs): #@TODO: Remove in 0.4.10 -- cgit v1.2.3 From 003c1ce55e7ac0765236d3210b8081bfc5fddb2d Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sun, 4 Jan 2015 20:23:01 +0100 Subject: [MultiHook] Better account check --- module/plugins/internal/MultiHook.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index b5ac132b7..ea9f32673 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.28" + __version__ = "0.29" __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -43,6 +43,7 @@ class MultiHook(Hook): def setup(self): + self.account = None self.type = self.core.pluginManager.findPlugin(self.__name__)[1] or "hoster" self.plugins = [] self.supported = [] @@ -51,7 +52,12 @@ class MultiHook(Hook): def coreReady(self): self.account = self.core.accountManager.getAccountPlugin(self.__name__) + + if self.account and not self.account.canUse(): + self.account = None + if not self.account: + self.logWarning("MultiHook will be deactivated due missing account reference") self.setConfig('activated', False) -- cgit v1.2.3 From df143e902d00903f16cf32174948f636bda56e4c Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Thu, 8 Jan 2015 22:58:32 +0100 Subject: "New Year" Update: internal plugins --- module/plugins/internal/MultiHook.py | 158 +++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 62 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index ea9f32673..202868175 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,12 +9,15 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.29" + __version__ = "0.30" - __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"), - ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), - ("revertfailed", "bool" , "Revert to standard download if download fails", False), - ("interval" , "int" , "Reload interval in hours (0 to disable)" , 12 )] + __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 )] __description__ = """Hook plugin for multi hoster/crypter""" __license__ = "GPLv3" @@ -22,45 +25,68 @@ class MultiHook(Hook): ("Walter Purcaro", "vuolter@gmail.com")] - MIN_INTERVAL = 12 * 60 * 60 #: reload plugins every 12h + MIN_INTERVAL = 1 * 60 * 60 - PLUGIN_REPLACEMENTS = [("1fichier.com" , "onefichier.com"), - ("2shared.com" , "twoshared.com" ), - ("4shared.com" , "fourshared.com"), - ("cloudnator.com" , "shragle.com" ), - ("easy-share.com" , "crocko.com" ), - ("fileparadox.com", "fileparadox.in"), - ("freakshare.net" , "freakshare.com"), - ("hellshare.com" , "hellshare.cz" ), - ("ifile.it" , "filecloud.io" ), - ("nowdownload.ch" , "nowdownload.sx"), - ("nowvideo.co" , "nowvideo.sx" ), - ("putlocker.com" , "firedrive.com" ), - ("share-rapid.cz" , "multishare.cz" ), - ("sharerapid.cz" , "multishare.cz" ), - ("ul.to" , "uploaded.to" ), - ("uploaded.net" , "uploaded.to" )] + DOMAIN_REPLACEMENTS = [(r'\d+.+' , "_\0" ), + (r'bayfiles\.net' , "bayfiles.com" ), + (r'cloudnator\.com' , "shragle.com" ), + (r'dfiles\.eu' , "depositfiles.com"), + (r'easy-share\.com' , "crocko.com" ), + (r'freakshare\.net' , "freakshare.com" ), + (r'hellshare\.com' , "hellshare.cz" ), + (r'ifile\.it' , "filecloud.io" ), + (r'nowdownload\.\w+', "nowdownload.sx" ), + (r'nowvideo\.\w+' , "nowvideo.sx" ), + (r'putlocker\.com' , "firedrive.com" ), + (r'share-?rapid\.cz', "multishare.cz" ), + (r'ul\.to' , "uploaded.to" ), + (r'uploaded\.net' , "uploaded.to" ), + (r'uploadhero\.co' , "uploadhero.com" ), + (r'zshares\.net' , "zshare.net" )] def setup(self): - self.account = None - self.type = self.core.pluginManager.findPlugin(self.__name__)[1] or "hoster" self.plugins = [] self.supported = [] self.new_supported = [] + self.account = None + self.pluginclass = None + self.pluginmodule = None + self.pluginname = None + self.plugintype = None - def coreReady(self): - self.account = self.core.accountManager.getAccountPlugin(self.__name__) + self._initPlugin() + + + def _initPlugin(self): + plugin, type = self.core.pluginManager.findPlugin(self.__name__) + + if not plugin: + self.logWarning("Hook plugin will be deactivated due missing plugin reference") + self.setConfig('activated', False) + else: + self.pluginname = self.__name__ + self.plugintype = type + self.pluginmodule = self.core.pluginManager.loadModule(type, self.__name__) + self.pluginclass = getattr(self.pluginmodule, self.__name__) + + + def _loadAccount(self): + self.account = self.core.accountManager.getAccountPlugin(self.pluginname) if self.account and not self.account.canUse(): self.account = None - if not self.account: - self.logWarning("MultiHook will be deactivated due missing account reference") + if not self.account and hasattr(self.pluginclass, "LOGIN_ACCOUNT") and not self.pluginclass.LOGIN_ACCOUNT: + self.logWarning("Hook plugin will be deactivated due missing account reference") self.setConfig('activated', False) + def coreReady(self): + self._loadAccount() + + def getURL(self, *args, **kwargs): #@TODO: Remove in 0.4.10 """ see HTTPRequest for argument list """ h = pyreq.getHTTPRequest(timeout=120) @@ -81,19 +107,19 @@ class MultiHook(Hook): return default - def pluginCached(self): + def pluginsCached(self): if not self.plugins: try: - pluginset = self.pluginSet(self.getHosters() if self.type == "hoster" else self.getCrypters()) + pluginset = self._pluginSet(self.getHosters() if self.plugintype == "hoster" else self.getCrypters()) except Exception, e: self.logError(e) return [] try: - configmode = self.getConfig("mode", 'all') + configmode = self.getConfig("pluginmode", 'all') if configmode in ("listed", "unlisted"): pluginlist = self.getConfig("pluginlist", '').replace('|', ',').replace(';', ',').split(',') - configset = self.pluginSet(pluginlist) + configset = self._pluginSet(pluginlist) if configmode == "listed": pluginset &= configset @@ -108,13 +134,14 @@ class MultiHook(Hook): return self.plugins - def pluginSet(self, plugins): + def _pluginSet(self, plugins): plugins = set((str(x).strip().lower() for x in plugins)) - for rep in self.PLUGIN_REPLACEMENTS: - if rep[0] in plugins: - plugins.remove(rep[0]) - plugins.add(rep[1]) + for rf, rt in self.DOMAIN_REPLACEMENTS: + regex = re.compile(rf) + for p in filter(lambda x: regex.match(x), plugins): + plugins.remove(p) + plugins.add(re.sub(rf, rt, p)) plugins.discard('') @@ -139,9 +166,7 @@ class MultiHook(Hook): def periodical(self): """reload plugin list periodically""" - self.interval = max(self.getConfig("interval", 0), self.MIN_INTERVAL) - - self.logInfo(_("Reloading supported %s list") % self.type) + self.logInfo(_("Reloading supported %s list") % self.plugintype) old_supported = self.supported @@ -158,18 +183,24 @@ class MultiHook(Hook): for plugin in old_supported: self.unloadPlugin(plugin) + if self.getConfig("reload", True): + self.interval = max(self.getConfig("reloadinterval", 12), self.MIN_INTERVAL) + else: + self.core.scheduler.removeJob(self.cb) + self.cb = None + def overridePlugins(self): excludedList = [] - if self.type == "hoster": + if self.plugintype == "hoster": pluginMap = dict((name.lower(), name) for name in self.core.pluginManager.hosterPlugins.iterkeys()) accountList = [account.type.lower() for account in self.core.api.getAccounts(False) if account.valid and account.premium] else: pluginMap = {} accountList = [name[::-1].replace("Folder"[::-1], "", 1).lower()[::-1] for name in self.core.pluginManager.crypterPlugins.iterkeys()] - for plugin in self.pluginCached(): + for plugin in self.pluginsCached(): name = remove_chars(plugin, "-.") if name in accountList: @@ -181,42 +212,39 @@ class MultiHook(Hook): self.new_supported.append(plugin) if not self.supported and not self.new_supported: - self.logError(_("No %s loaded") % self.type) + self.logError(_("No %s loaded") % self.plugintype) return - module = self.core.pluginManager.getPlugin(self.__name__) - klass = getattr(module, self.__name__) - # inject plugin plugin - self.logDebug("Overwritten %ss: %s" % (self.type, ", ".join(sorted(self.supported)))) + self.logDebug("Overwritten %ss: %s" % (self.plugintype, ", ".join(sorted(self.supported)))) for plugin in self.supported: - hdict = self.core.pluginManager.plugins[self.type][plugin] - hdict['new_module'] = module - hdict['new_name'] = self.__name__ + hdict = self.core.pluginManager.plugins[self.plugintype][plugin] + hdict['new_module'] = self.pluginmodule + hdict['new_name'] = self.pluginname if excludedList: - self.logInfo(_("%ss not overwritten: %s") % (self.type.capitalize(), ", ".join(sorted(excludedList)))) + self.logInfo(_("%ss not overwritten: %s") % (self.plugintype.capitalize(), ", ".join(sorted(excludedList)))) if self.new_supported: plugins = sorted(self.new_supported) - self.logDebug("New %ss: %s" % (self.type, ", ".join(plugins))) + self.logDebug("New %ss: %s" % (self.plugintype, ", ".join(plugins))) # create new regexp regexp = r'.*(%s).*' % "|".join([x.replace(".", "\.") for x in plugins]) - if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__: - regexp = r'%s|%s' % (klass.__pattern__, regexp) + if hasattr(self.pluginclass, "__pattern__") and isinstance(self.pluginclass.__pattern__, basestring) and '://' in self.pluginclass.__pattern__: + regexp = r'%s|%s' % (self.pluginclass.__pattern__, regexp) self.logDebug("Regexp: %s" % regexp) - hdict = self.core.pluginManager.plugins[self.type][self.__name__] + hdict = self.core.pluginManager.plugins[self.plugintype][self.pluginname] hdict['pattern'] = regexp hdict['re'] = re.compile(regexp) def unloadPlugin(self, plugin): - hdict = self.core.pluginManager.plugins[self.type][plugin] + hdict = self.core.pluginManager.plugins[self.plugintype][plugin] if "module" in hdict: del hdict['module'] @@ -231,18 +259,24 @@ class MultiHook(Hook): self.unloadPlugin(plugin) # reset pattern - klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__) - hdict = self.core.pluginManager.plugins[self.type][self.__name__] + hdict = self.core.pluginManager.plugins[self.plugintype][self.pluginname] - hdict['pattern'] = getattr(klass, "__pattern__", r'^unmatchable$') + 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.hasStatus("failed") and self.getConfig("revertfailed", True): - hdict = self.core.pluginManager.plugins[self.type][pyfile.pluginname] - if "new_name" in hdict and hdict['new_name'] == self.__name__: + 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") + else: + retries = max(self.getConfig("retry", 10), 0) + wait_time = max(self.getConfig("retryinterval", 1), 0) + pyfile.plugin.retry(retries, wait_time, "MultiHook") -- cgit v1.2.3 From ea2d07843d369d8b8fd2aa02930bf549ce94a661 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Fri, 9 Jan 2015 03:25:42 +0100 Subject: Spare fixes --- module/plugins/internal/MultiHook.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 202868175..82a0a68ea 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -27,22 +27,26 @@ class MultiHook(Hook): MIN_INTERVAL = 1 * 60 * 60 - DOMAIN_REPLACEMENTS = [(r'\d+.+' , "_\0" ), - (r'bayfiles\.net' , "bayfiles.com" ), - (r'cloudnator\.com' , "shragle.com" ), - (r'dfiles\.eu' , "depositfiles.com"), - (r'easy-share\.com' , "crocko.com" ), - (r'freakshare\.net' , "freakshare.com" ), - (r'hellshare\.com' , "hellshare.cz" ), - (r'ifile\.it' , "filecloud.io" ), - (r'nowdownload\.\w+', "nowdownload.sx" ), - (r'nowvideo\.\w+' , "nowvideo.sx" ), - (r'putlocker\.com' , "firedrive.com" ), - (r'share-?rapid\.cz', "multishare.cz" ), - (r'ul\.to' , "uploaded.to" ), - (r'uploaded\.net' , "uploaded.to" ), - (r'uploadhero\.co' , "uploadhero.com" ), - (r'zshares\.net' , "zshare.net" )] + DOMAIN_REPLACEMENTS = [(r'180upload.com' , "hundredeightyupload.com"), + (r'1fichier.com' , "onefichier.com" ), + (r'2shared.com' , "twoshared.com" ), + (r'4shared.com' , "fourshared.com" ), + (r'bayfiles\.net' , "bayfiles.com" ), + (r'cloudnator\.com' , "shragle.com" ), + (r'dfiles\.eu' , "depositfiles.com" ), + (r'easy-share\.com' , "crocko.com" ), + (r'freakshare\.net' , "freakshare.com" ), + (r'hellshare\.com' , "hellshare.cz" ), + (r'ifile\.it' , "filecloud.io" ), + (r'nowdownload\.\w+', "nowdownload.sx" ), + (r'nowvideo\.\w+' , "nowvideo.sx" ), + (r'putlocker\.com' , "firedrive.com" ), + (r'share-?rapid\.cz', "multishare.cz" ), + (r'ul\.to' , "uploaded.to" ), + (r'uploaded\.net' , "uploaded.to" ), + (r'uploadhero\.co' , "uploadhero.com" ), + (r'zshares\.net' , "zshare.net" ), + (r'\d+.+' , "X\0" )] def setup(self): -- cgit v1.2.3 From 7950463dbd5cc062f89a1b69bbc1464a8e0ad1b7 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Fri, 9 Jan 2015 17:31:46 +0100 Subject: [MultiHook] Fix auto-deactivation --- module/plugins/internal/MultiHook.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 82a0a68ea..9acf3744f 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.30" + __version__ = "0.31" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -82,7 +82,7 @@ class MultiHook(Hook): if self.account and not self.account.canUse(): self.account = None - if not self.account and hasattr(self.pluginclass, "LOGIN_ACCOUNT") and not self.pluginclass.LOGIN_ACCOUNT: + if not self.account and hasattr(self.pluginclass, "LOGIN_ACCOUNT") and self.pluginclass.LOGIN_ACCOUNT: self.logWarning("Hook plugin will be deactivated due missing account reference") self.setConfig('activated', False) -- cgit v1.2.3 From 8f46ca7012fd9f17a99ae9baa3394be747f26a7e Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Fri, 9 Jan 2015 21:07:41 +0100 Subject: [MultiHook] Fix encoding in _pluginSet --- module/plugins/internal/MultiHook.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 9acf3744f..bb132252f 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -3,13 +3,13 @@ import re from module.plugins.Hook import Hook -from module.utils import remove_chars +from module.utils import decode, remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.31" + __version__ = "0.32" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -95,6 +95,8 @@ class MultiHook(Hook): """ see HTTPRequest for argument list """ h = pyreq.getHTTPRequest(timeout=120) try: + if not 'decode' in kwargs: + kwargs['decode'] = True rep = h.load(*args, **kwargs) finally: h.close() @@ -139,7 +141,7 @@ class MultiHook(Hook): def _pluginSet(self, plugins): - plugins = set((str(x).strip().lower() for x in plugins)) + plugins = set((decode(x).strip().lower() for x in plugins)) for rf, rt in self.DOMAIN_REPLACEMENTS: regex = re.compile(rf) -- cgit v1.2.3 From 502c1437e838282aa56a286bb3751382c3aaf65e Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 10 Jan 2015 16:01:38 +0100 Subject: Improve getInfo --- module/plugins/internal/MultiHook.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index bb132252f..4408ebf0e 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import decode, remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.32" + __version__ = "0.33" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -27,10 +27,10 @@ class MultiHook(Hook): MIN_INTERVAL = 1 * 60 * 60 - DOMAIN_REPLACEMENTS = [(r'180upload.com' , "hundredeightyupload.com"), - (r'1fichier.com' , "onefichier.com" ), - (r'2shared.com' , "twoshared.com" ), - (r'4shared.com' , "fourshared.com" ), + DOMAIN_REPLACEMENTS = [(r'180upload\.com' , "hundredeightyupload.com"), + (r'1fichier\.com' , "onefichier.com" ), + (r'2shared\.com' , "twoshared.com" ), + (r'4shared\.com' , "fourshared.com" ), (r'bayfiles\.net' , "bayfiles.com" ), (r'cloudnator\.com' , "shragle.com" ), (r'dfiles\.eu' , "depositfiles.com" ), -- cgit v1.2.3 From 398a0dd02df28b6bbdb8c7f950db3131e77d8183 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 10 Jan 2015 19:50:54 +0100 Subject: [MultiHook] Fix downloadFailed routine --- module/plugins/internal/MultiHook.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 4408ebf0e..ac53c0c9c 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -9,7 +9,7 @@ from module.utils import decode, remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.33" + __version__ = "0.34" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -285,4 +285,9 @@ class MultiHook(Hook): else: retries = max(self.getConfig("retry", 10), 0) wait_time = max(self.getConfig("retryinterval", 1), 0) - pyfile.plugin.retry(retries, wait_time, "MultiHook") + + if 0 < retries > pyfile.plugin.retries: + pyfile.plugin.retries += 1 + pyfile.plugin.setCustomStatus("MultiHook", "queued") + pyfile.plugin.setWait(wait_time) + pyfile.plugin.wait() -- cgit v1.2.3 From aac6063859b9036612e86fb4029dc010d5c5d1e0 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 10 Jan 2015 19:53:09 +0100 Subject: Code cosmetics --- module/plugins/internal/MultiHook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index ac53c0c9c..8bf72f21b 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -285,7 +285,7 @@ class MultiHook(Hook): else: retries = max(self.getConfig("retry", 10), 0) wait_time = max(self.getConfig("retryinterval", 1), 0) - + if 0 < retries > pyfile.plugin.retries: pyfile.plugin.retries += 1 pyfile.plugin.setCustomStatus("MultiHook", "queued") -- cgit v1.2.3 From 4747e1d7958c9fb1180da6f3a21f3093220a6655 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 10 Jan 2015 21:17:27 +0100 Subject: Code improvements --- module/plugins/internal/MultiHook.py | 49 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 19 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 8bf72f21b..a3b266679 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -2,6 +2,8 @@ import re +from time import sleep + from module.plugins.Hook import Hook from module.utils import decode, remove_chars @@ -9,7 +11,7 @@ from module.utils import decode, remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.34" + __version__ = "0.35" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -114,34 +116,43 @@ class MultiHook(Hook): def pluginsCached(self): - if not self.plugins: + if self.plugins: + return self.plugins + + for _i in xrange(3): try: pluginset = self._pluginSet(self.getHosters() if self.plugintype == "hoster" else self.getCrypters()) + except Exception, e: - self.logError(e) - return [] + self.logError(e, "Waiting 1 minute and retry") + sleep(60) + + else: + break + else: + return list() - try: - configmode = self.getConfig("pluginmode", 'all') - if configmode in ("listed", "unlisted"): - pluginlist = self.getConfig("pluginlist", '').replace('|', ',').replace(';', ',').split(',') - configset = self._pluginSet(pluginlist) + try: + configmode = self.getConfig("pluginmode", 'all') + if configmode in ("listed", "unlisted"): + pluginlist = self.getConfig("pluginlist", '').replace('|', ',').replace(';', ',').split(',') + configset = self._pluginSet(pluginlist) - if configmode == "listed": - pluginset &= configset - else: - pluginset -= configset + if configmode == "listed": + pluginset &= configset + else: + pluginset -= configset - except Exception, e: - self.logError(e) + except Exception, e: + self.logError(e) - self.plugins = list(pluginset) + self.plugins = list(pluginset) return self.plugins def _pluginSet(self, plugins): - plugins = set((decode(x).strip().lower() for x in plugins)) + plugins = set((decode(x).strip().lower() for x in plugins if '.' in x)) for rf, rt in self.DOMAIN_REPLACEMENTS: regex = re.compile(rf) @@ -238,7 +249,7 @@ class MultiHook(Hook): self.logDebug("New %ss: %s" % (self.plugintype, ", ".join(plugins))) # create new regexp - regexp = r'.*(%s).*' % "|".join([x.replace(".", "\.") for x in plugins]) + regexp = r'.*(?P%s).*' % "|".join([x.replace(".", "\.") for x in plugins]) if hasattr(self.pluginclass, "__pattern__") and isinstance(self.pluginclass.__pattern__, basestring) and '://' in self.pluginclass.__pattern__: regexp = r'%s|%s' % (self.pluginclass.__pattern__, regexp) @@ -287,7 +298,7 @@ class MultiHook(Hook): wait_time = max(self.getConfig("retryinterval", 1), 0) if 0 < retries > pyfile.plugin.retries: + pyfile.setCustomStatus("MultiHook", "queued") pyfile.plugin.retries += 1 - pyfile.plugin.setCustomStatus("MultiHook", "queued") pyfile.plugin.setWait(wait_time) pyfile.plugin.wait() -- cgit v1.2.3 From a6754015159f1b447d870711c901cb3fc4e1515d Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Tue, 13 Jan 2015 01:46:32 +0100 Subject: [MultiHook] Fix DOMAIN_REPLACEMENTS + retry feature --- module/plugins/internal/MultiHook.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index a3b266679..795565d73 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -11,7 +11,7 @@ from module.utils import decode, remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.35" + __version__ = "0.36" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -48,7 +48,7 @@ class MultiHook(Hook): (r'uploaded\.net' , "uploaded.to" ), (r'uploadhero\.co' , "uploadhero.com" ), (r'zshares\.net' , "zshare.net" ), - (r'\d+.+' , "X\0" )] + (r'(\d+.+)' , "X\1" )] def setup(self): @@ -118,15 +118,15 @@ class MultiHook(Hook): def pluginsCached(self): if self.plugins: return self.plugins - + for _i in xrange(3): try: pluginset = self._pluginSet(self.getHosters() if self.plugintype == "hoster" else self.getCrypters()) - + except Exception, e: self.logError(e, "Waiting 1 minute and retry") sleep(60) - + else: break else: @@ -293,12 +293,16 @@ class MultiHook(Hook): 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() -- cgit v1.2.3 From f015b68c186c5d73a24ba2b99804757d7ca8b09e Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sun, 18 Jan 2015 13:34:51 +0100 Subject: [MultiHook] Fix reloadinterval --- module/plugins/internal/MultiHook.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'module/plugins/internal/MultiHook.py') diff --git a/module/plugins/internal/MultiHook.py b/module/plugins/internal/MultiHook.py index 795565d73..652443098 100644 --- a/module/plugins/internal/MultiHook.py +++ b/module/plugins/internal/MultiHook.py @@ -11,7 +11,7 @@ from module.utils import decode, remove_chars class MultiHook(Hook): __name__ = "MultiHook" __type__ = "hook" - __version__ = "0.36" + __version__ = "0.37" __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"), ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ), @@ -201,7 +201,7 @@ class MultiHook(Hook): self.unloadPlugin(plugin) if self.getConfig("reload", True): - self.interval = max(self.getConfig("reloadinterval", 12), self.MIN_INTERVAL) + self.interval = max(self.getConfig("reloadinterval", 12) * 60 * 60, self.MIN_INTERVAL) else: self.core.scheduler.removeJob(self.cb) self.cb = None -- cgit v1.2.3