diff options
author | mkaay <mkaay@mkaay.de> | 2010-08-05 21:18:34 +0200 |
---|---|---|
committer | mkaay <mkaay@mkaay.de> | 2010-08-05 21:18:34 +0200 |
commit | bab94efdcfe9947c42e4d8f8cfeb48e2d921d93a (patch) | |
tree | 91ac8239d9494540126a9a822c89ecdcdda1b22d /module/plugins/hooks | |
parent | gregy's opera fix (diff) | |
download | pyload-bab94efdcfe9947c42e4d8f8cfeb48e2d921d93a.tar.xz |
order and priority preperations
multi home plugin
some fixes
Diffstat (limited to 'module/plugins/hooks')
-rw-r--r-- | module/plugins/hooks/MultiHome.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/module/plugins/hooks/MultiHome.py b/module/plugins/hooks/MultiHome.py new file mode 100644 index 000000000..023a282bb --- /dev/null +++ b/module/plugins/hooks/MultiHome.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay +""" + +from module.plugins.Hook import Hook +from time import time + +class MultiHome(Hook): + __name__ = "MultiHome" + __version__ = "0.1" + __description__ = """ip address changer""" + __config__ = [ ("activated", "bool", "Activated" , "True"), + ("interfaces", "str", "Interfaces" , "") ] + __author_name__ = ("mkaay") + __author_mail__ = ("mkaay@mkaay.de") + + def setup(self): + self.register = {} + self.interfaces = [] + self.parseInterfaces(self.getConfig("interfaces").split(";")) + if not self.interfaces: + self.parseInterfaces([self.config["general"]["download_interface"]]) + self.setConfig("interfaces", self.toConfig()) + + def toConfig(self): + return ";".join([i.adress for i in self.interfaces]) + + def parseInterfaces(self, interfaces): + for interface in interfaces: + if not interface or str(interface).lower() == "none": + continue + self.interfaces.append(Interface(interface)) + + def coreReady(self): + requestFactory = self.core.requestFactory + oldGetRequest = requestFactory.getRequest + def getRequest(pluginName, account=None, type="HTTP"): + iface = self.bestInterface(pluginName, account) + iface.useFor(pluginName, account) + requestFactory.iface = iface.adress + return oldGetRequest(pluginName, account, type) + requestFactory.getRequest = getRequest + + def bestInterface(self, pluginName, account): + best = None + for interface in self.interfaces: + if not best or interface.lastPluginAccess(pluginName, account) < best.lastPluginAccess(pluginName, account): + best = interface + return best + +class Interface(object): + def __init__(self, adress): + self.adress = adress + self.history = {} + + def lastPluginAccess(self, pluginName, account): + if self.history.has_key((pluginName, account)): + return self.history[(pluginName, account)] + return 0 + + def useFor(self, pluginName, account): + self.history[(pluginName, account)] = time() + + def __repr__(self): + return "<Interface - %s>" % self.adress |