From bab94efdcfe9947c42e4d8f8cfeb48e2d921d93a Mon Sep 17 00:00:00 2001
From: mkaay <mkaay@mkaay.de>
Date: Thu, 5 Aug 2010 21:18:34 +0200
Subject: order and priority preperations multi home plugin some fixes

---
 module/plugins/hooks/MultiHome.py | 80 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 module/plugins/hooks/MultiHome.py

(limited to 'module/plugins/hooks')

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
-- 
cgit v1.2.3