link correct url for web interface sample
[enigma2.git] / lib / python / Plugins / Extensions / WebInterface / plugin.py
index f0be4e4..71c4afc 100644 (file)
@@ -1,19 +1,60 @@
 from Plugins.Plugin import PluginDescriptor
 
+sessions = [ ]
+
 def startWebserver():
        from twisted.internet import reactor
-       from twisted.web2 import server, http, static
-       toplevel = static.File("/hdd")
-       site = server.Site(toplevel)
+       from twisted.web2 import server, http, static, resource, stream, http_headers, responsecode
+       from twisted.python import util
+       import webif
+
+       class ScreenPage(resource.Resource):
+               def __init__(self, path):
+                       self.path = path
+                       
+               def render(self, req):
+                       global sessions
+                       if sessions == [ ]:
+                               return http.Response(200, stream="please wait until enigma has booted")
+                       
+                       s = stream.ProducerStream()
+                       webif.renderPage(s, self.path, sessions[0])  # login?
+                       return http.Response(stream=s)
+
+               def locateChild(self, request, segments):
+                       path = '/'.join(["web"] + segments)
+                       if path[-1:] == "/":
+                               path += "index"
+                       
+                       path += ".xml"
+                       return ScreenPage(path), ()
+
+       class Toplevel(resource.Resource):
+               addSlash = True
+               
+               def render(self, req):
+                       return http.Response(responsecode.OK, {'Content-type': http_headers.MimeType('text', 'html')},
+                               stream='Hello! you want probably go to <a href="/web">the test</a> instead.')
+
+               child_web = ScreenPage("/") # "/web"
+               child_hdd = static.File("/hdd")
+               child_webdata = static.File(util.sibpath(__file__, "web-data"))
+
+       site = server.Site(Toplevel())
        
        reactor.listenTCP(80, http.HTTPFactory(site))
 
-def autostart(reason):
+def autostart(reason, **kwargs):
+       if "session" in kwargs:
+               global sessions
+               sessions.append(kwargs["session"])
+               return
+
        if reason == 0:
-               try:
+               #try:
                        startWebserver()
-               except ImportError:
-                       print "twisted not available, not starting web services"
+               #except ImportError:
+               #       print "twisted not available, not starting web services"
 
-def Plugins():
-       return PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)
+def Plugins(**kwargs):
+       return PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart)