nothing
[vuplus_dvbapp-plugin] / webinterface / src / webif.py
index 2aa9c6c..97e4bdd 100644 (file)
@@ -21,7 +21,10 @@ from urllib2 import quote
 #It IS used (dynamically)
 from WebScreens import *
 #DO NOT REMOVE THIS IMPORT
-               
+
+
+global screen_cache
+screen_cache = {}
 
 # The classes and Function in File handle all ScreenPage-based requests
 # ScreenPages use enigma2 standard functionality to bring contents to a webfrontend
@@ -43,7 +46,7 @@ class OneTimeElement(Element):
                        paramlist = self.source_id.split(",")
                        list = {}
                        for key in paramlist:
-                               arg = args.get(key, [])
+                               arg = args.get(key, ())
                                Len = len(arg)
                                if Len == 0:
                                        list[key] = None
@@ -53,7 +56,7 @@ class OneTimeElement(Element):
                                        list[key] = arg[0]
                        self.source.handleCommand(list)
                else:
-                       for c in args.get(self.source_id, []):
+                       for c in args.get(self.source_id, ()):
                                self.source.handleCommand(c)
 
        def render(self, request):
@@ -138,7 +141,7 @@ class TextToHTML(Converter):
                Converter.__init__(self, arg)
 
        def getHTML(self, id):
-               return self.source.text # encode & etc. here!
+               return self.source.text.replace('\xc2\x86', '').replace('\xc2\x87', '').decode("utf-8", "ignore").encode("utf-8") # encode & etc. here!
 
 #===============================================================================
 # TextToXML
@@ -150,7 +153,7 @@ class TextToXML(Converter):
                Converter.__init__(self, arg)
 
        def getHTML(self, id):
-               return escape_xml(self.source.text).replace("\x19", "").replace("\x1c", "").replace("\x1e", "")
+               return escape_xml(self.source.text).replace('\xc2\x86', '').replace('\xc2\x87', '').replace("\x19", "").replace("\x1c", "").replace("\x1e", "").decode("utf-8", "ignore").encode("utf-8")
 
 #===============================================================================
 # TextToURL
@@ -162,7 +165,7 @@ class TextToURL(Converter):
                Converter.__init__(self, arg)
 
        def getHTML(self, id):
-               return self.source.text.replace(" ", "%20")
+               return self.source.text.replace(" ", "%20").replace("+", "%2b").replace("&", "%26").replace('\xc2\x86', '').replace('\xc2\x87', '').decode("utf-8", "ignore").encode("utf-8")
 
 #===============================================================================
 # ReturnEmptyXML
@@ -234,16 +237,19 @@ class SimpleListFiller(Converter):
                                item = ""
                                
                        for (element, filternum) in list:
+                               #filter out "non-displayable" Characters - at the very end, do it the hard way...
+                               item = str(item).replace('\xc2\x86', '').replace('\xc2\x87', '').replace("\x19", "").replace("\x1c", "").replace("\x1e", "").decode("utf-8", "ignore").encode("utf-8")
+                               
                                if not filternum:
                                        append(element)
                                elif filternum == 2:
-                                       append(str(item).replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"'))
+                                       append(item.replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"'))
                                elif filternum == 3:                                    
-                                       append(escape_xml(str(item)))
+                                       append(escape_xml(item))
                                elif filternum == 4:
-                                       append(str(item).replace("%", "%25").replace("+", "%2B").replace('&', '%26').replace('?', '%3f').replace(' ', '+'))
+                                       append(item.replace("%", "%25").replace("+", "%2B").replace('&', '%26').replace('?', '%3f').replace(' ', '+'))
                                elif filternum == 5:
-                                       append(quote(str(item)))
+                                       append(quote(item))
                                elif filternum == 6:
                                        time = parseint(item) or 0
                                        t = localtime(time)
@@ -253,7 +259,7 @@ class SimpleListFiller(Converter):
                                        t = localtime(time)
                                        append("%d min" % (time / 60))
                                else:
-                                       append(str(item))
+                                       append(item)
                # (this will be done in c++ later!)
 
                return ''.join(strlist)         
@@ -294,7 +300,8 @@ class ListFiller(Converter):
                                #None becomes ""
                                curitem = ""
                                if filternum:
-                                       curitem = item[element]
+                                       #filter out "non-displayable" Characters - at the very end, do it the hard way...
+                                       curitem = str(item[element]).replace('\xc2\x86', '').replace('\xc2\x87', '').replace("\x19", "").replace("\x1c", "").replace("\x1e", "").decode("utf-8", "ignore").encode("utf-8")
                                        if curitem is None:
                                                curitem = ""
                                else:
@@ -304,13 +311,13 @@ class ListFiller(Converter):
                                if not filternum:
                                        append(element)
                                elif filternum == 2:
-                                       append(str(curitem).replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"'))
+                                       append(curitem.replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"'))
                                elif filternum == 3:
-                                       append(escape_xml(str(curitem)))
+                                       append( escape_xml( curitem ))
                                elif filternum == 4:
-                                       append(str(curitem).replace("%", "%25").replace("+", "%2B").replace('&', '%26').replace('?', '%3f').replace(' ', '+'))
+                                       append(curitem.replace("%", "%25").replace("+", "%2B").replace('&', '%26').replace('?', '%3f').replace(' ', '+'))
                                elif filternum == 5:
-                                       append(quote(str(curitem)))
+                                       append(quote(curitem))
                                elif filternum == 6:
                                        from time import localtime
                                        time = int(float(curitem)) or 0
@@ -322,7 +329,7 @@ class ListFiller(Converter):
                                        t = localtime(time)
                                        append("%d min" % (time / 60))                                  
                                else:
-                                       append(str(curitem))
+                                       append(curitem)
                # (this will be done in c++ later!)
 
                return ''.join(strlist)
@@ -401,9 +408,9 @@ class webifHandler(ContentHandler):
                        self.converter = eval(ctype[4:])
                else:
                        try:
-                               self.converter = my_import('.'.join(["Components", "Converter", ctype])).__dict__.get(ctype)
+                               self.converter = my_import('.'.join(("Components", "Converter", ctype))).__dict__.get(ctype)
                        except ImportError:
-                               self.converter = my_import('.'.join(["Plugins", "Extensions", "WebInterface", "WebComponents", "Converter", ctype])).__dict__.get(ctype)
+                               self.converter = my_import('.'.join(("Plugins", "Extensions", "WebInterface", "WebComponents", "Converter", ctype))).__dict__.get(ctype)
                self.sub = [ ]
 
        def end_convert(self):
@@ -431,11 +438,8 @@ class webifHandler(ContentHandler):
                if name[:3] == "e2:":
                        self.mode += 1
 
-               tag = [' %s="%s"' % (key, val) for (key, val) in attrs.items()]
-               tag.insert(0, name)
-               tag.insert(0, '<')
-               tag.append('>')
-               tag = ''.join(tag)#.encode('utf-8')
+               tag = '<' + name + ''.join([' %s="%s"' % x for x in attrs.items()]) + '>'
+               #tag = tag.encode('utf-8')
 
                if self.mode == 0:
                        self.res.append(tag)
@@ -543,12 +547,11 @@ def renderPage(request, path, session):
        else:   
                def requestFinishDeferred(nothing, handler, request):
                        from twisted.internet import reactor
-                       reactor.callLater(1, requestFinish, handler, request)                           
+                       reactor.callLater(0, requestFinish, handler, request)                           
                
                d = request.notifyFinish()
 
-               d.addErrback( requestFinishDeferred, handler, request )
-               d.addCallback( requestFinishDeferred, handler, request )
+               d.addBoth( requestFinishDeferred, handler, request )
                                                        
 #===============================================================================
 # requestFinish