- add new Source for Request-data
authorRico Schulte <ricoschulte@users.schwerkraft.elitedvb.net>
Sun, 28 Jan 2007 17:19:55 +0000 (17:19 +0000)
committerRico Schulte <ricoschulte@users.schwerkraft.elitedvb.net>
Sun, 28 Jan 2007 17:19:55 +0000 (17:19 +0000)
- now in every WebSreen is the Twisted requestobject present
- fix Problem for local IP in stream.m3u.xml

webinterface/src/WebComponents/Sources/Makefile.am
webinterface/src/WebComponents/Sources/RequestData.py [new file with mode: 0644]
webinterface/src/webif.py

index 40e3e3b..8cf62b9 100644 (file)
@@ -1,3 +1,3 @@
 installdir = /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/WebComponents/Sources/
 
-install_PYTHON = __init__.py EPG.py Timer.py Volume.py Movie.py Message.py
+install_PYTHON = __init__.py EPG.py Timer.py Volume.py Movie.py Message.py RequestData.py
diff --git a/webinterface/src/WebComponents/Sources/RequestData.py b/webinterface/src/WebComponents/Sources/RequestData.py
new file mode 100644 (file)
index 0000000..7eb660c
--- /dev/null
@@ -0,0 +1,42 @@
+from Components.Sources.Source import Source
+
+class RequestData(Source):
+       """
+               a source for requestinformations like the adress that the client requested to reache the box
+       """
+       HOST = 0
+       PORT = 1
+       METHOD = 2
+       PATH = 3
+       REMOTEADRESS = 4
+       REMOTEPORT = 5
+       REMOTETYPE = 6
+       URI = 7
+       
+       def __init__(self,request, what = None):
+               Source.__init__(self)
+               self.request = request
+               self.what = what
+
+       def handleCommand(self, cmd):
+               pass
+               
+       def getHTML(self, id):
+               if self.what is self.HOST:
+                       return self.request.host
+               elif self.what is self.PORT:
+                       return self.request.port
+               elif self.what is self.METHOD:
+                       return self.request.method
+               elif self.what is self.PATH:
+                       return self.request.path
+               elif self.what is self.REMOTEADRESS:
+                       return self.request.remoteAddr.host
+               elif self.what is self.REMOTEPORT:
+                       return self.request.remoteAddr.port
+               elif self.what is self.REMOTETYPE:
+                       return self.request.remoteAddr.type
+               elif self.what is self.URI:
+                       return self.request.uri
+               else:
+                       return "N/A"
\ No newline at end of file
index b6673a4..03e7c57 100644 (file)
@@ -21,6 +21,7 @@ from WebComponents.Sources.EPG import EPG
 from WebComponents.Sources.Timer import Timer
 from WebComponents.Sources.Movie import Movie
 from WebComponents.Sources.Message import Message
+from WebComponents.Sources.RequestData import RequestData
 from Components.Sources.FrontendStatus import FrontendStatus
 
 from Components.Converter.Converter import Converter
@@ -36,14 +37,14 @@ import time
 # prototype of the new web frontend template system.
 
 class WebScreen(Screen):
-       def __init__(self, session):
+       def __init__(self, session,request):
                Screen.__init__(self, session)
                self.stand_alone = True
-
+               self.request = request
 # a test screen
 class TestScreen(InfoBarServiceName, InfoBarEvent,InfoBarTuner, WebScreen):
-       def __init__(self, session):
-               WebScreen.__init__(self, session)
+       def __init__(self, session,request):
+               WebScreen.__init__(self, session,request)
                InfoBarServiceName.__init__(self)
                InfoBarEvent.__init__(self)
                InfoBarTuner.__init__(self)
@@ -75,20 +76,19 @@ class TestScreen(InfoBarServiceName, InfoBarEvent,InfoBarTuner, WebScreen):
 
 # TODO: (really.) put screens into own files.
 class Streaming(WebScreen):
-       def __init__(self, session):
-               WebScreen.__init__(self, session)
+       def __init__(self, session,request):
+               WebScreen.__init__(self, session,request)
                from Components.Sources.StreamService import StreamService
                self["StreamService"] = StreamService(self.session.nav)
 
 class StreamingM3U(WebScreen):
-       def __init__(self, session):
-               WebScreen.__init__(self, session)
+       def __init__(self, session,request):
+               WebScreen.__init__(self, session,request)
                from Components.Sources.StaticText import StaticText
                from Components.Sources.Config import Config
                from Components.config import config
-               
                self["ref"] = StaticText()
-               self["localip"] = Config(config.network.ip)
+               self["localip"] = RequestData(request,what=RequestData.HOST)
 
 # implements the 'render'-call.
 # this will act as a downstream_element, like a renderer.
@@ -151,7 +151,7 @@ class ListItem:
        def __init__(self, name, filternum):
                self.name = name
                self.filternum = filternum
-
+       
 class TextToHTML(Converter):
        def __init__(self, arg):
                Converter.__init__(self, arg)
@@ -211,16 +211,17 @@ class ListFiller(Converter):
        text = property(getText)
 
 class webifHandler(ContentHandler):
-       def __init__(self, session):
+       def __init__(self, session,request):
                self.res = [ ]
                self.mode = 0
                self.screen = None
                self.session = session
                self.screens = [ ]
+               self.request = request
        
        def startElement(self, name, attrs):
                if name == "e2:screen":
-                       self.screen = eval(attrs["name"])(self.session) # fixme
+                       self.screen = eval(attrs["name"])(self.session,self.request) # fixme
                        self.screens.append(self.screen)
                        return
        
@@ -325,7 +326,7 @@ def renderPage(stream, path, req, session):
        # read in the template, create required screens
        # we don't have persistense yet.
        # if we had, this first part would only be done once.
-       handler = webifHandler(session)
+       handler = webifHandler(session,req)
        parser = make_parser()
        parser.setFeature(feature_namespaces, 0)
        parser.setContentHandler(handler)