Merge with unstable branch - API changes are now active
authorStephan Reichholf <sreichholf@users.schwerkraft.elitedvb.net>
Fri, 8 May 2009 08:48:17 +0000 (08:48 +0000)
committerStephan Reichholf <sreichholf@users.schwerkraft.elitedvb.net>
Fri, 8 May 2009 08:48:17 +0000 (08:48 +0000)
119 files changed:
webinterface/CONTROL/control
webinterface/TODO
webinterface/src/WebComponents/Converter/HddInfo.py
webinterface/src/WebComponents/Converter/NetworkInfo.py
webinterface/src/WebComponents/Converter/SimpleResult.py
webinterface/src/WebComponents/Converter/VolumeInfo.py [new file with mode: 0644]
webinterface/src/WebComponents/Sources/AT.py
webinterface/src/WebComponents/Sources/About.py
webinterface/src/WebComponents/Sources/AudioTracks.py
webinterface/src/WebComponents/Sources/EPG.py
webinterface/src/WebComponents/Sources/Frontend.py
webinterface/src/WebComponents/Sources/Hdd.py
webinterface/src/WebComponents/Sources/LocationsAndTags.py
webinterface/src/WebComponents/Sources/MP.py
webinterface/src/WebComponents/Sources/Message.py
webinterface/src/WebComponents/Sources/Movie.py
webinterface/src/WebComponents/Sources/Network.py
webinterface/src/WebComponents/Sources/ParentControl.py
webinterface/src/WebComponents/Sources/PowerState.py
webinterface/src/WebComponents/Sources/RemoteControl.py
webinterface/src/WebComponents/Sources/RequestData.py
webinterface/src/WebComponents/Sources/ServiceListRecursive.py
webinterface/src/WebComponents/Sources/ServiceListReload.py
webinterface/src/WebComponents/Sources/Settings.py
webinterface/src/WebComponents/Sources/SubServices.py
webinterface/src/WebComponents/Sources/Timer.py
webinterface/src/WebComponents/Sources/Volume.py
webinterface/src/WebComponents/Sources/WAPfunctions.py
webinterface/src/WebIfConfig.py
webinterface/src/__init__.py
webinterface/src/plugin.py
webinterface/src/web-data/Makefile.am
webinterface/src/web-data/config.js
webinterface/src/web-data/gears_handler.js
webinterface/src/web-data/manifest.json
webinterface/src/web-data/objects.js
webinterface/src/web-data/streaminterface.html
webinterface/src/web-data/timer.js
webinterface/src/web-data/tools.js
webinterface/src/web-data/tpl/default/index.html
webinterface/src/web-data/tpl/default/streaminterface/tplBouquetList.htm
webinterface/src/web-data/tpl/default/streaminterface/tplCurrent.htm
webinterface/src/web-data/tpl/default/streaminterface/tplServiceList.htm
webinterface/src/web-data/tpl/default/style.css
webinterface/src/web-data/tpl/default/tplAbout.htm
webinterface/src/web-data/tpl/default/tplBouquetList.htm
webinterface/src/web-data/tpl/default/tplCurrent.htm
webinterface/src/web-data/tpl/default/tplDebug.htm
webinterface/src/web-data/tpl/default/tplEpgList.htm
webinterface/src/web-data/tpl/default/tplGrab.htm
webinterface/src/web-data/tpl/default/tplMediaPlayer.htm
webinterface/src/web-data/tpl/default/tplMovieList.htm
webinterface/src/web-data/tpl/default/tplNavBoxControl.htm
webinterface/src/web-data/tpl/default/tplNavMovies.htm
webinterface/src/web-data/tpl/default/tplNavRadio.htm
webinterface/src/web-data/tpl/default/tplNavTimer.htm
webinterface/src/web-data/tpl/default/tplNavTv.htm
webinterface/src/web-data/tpl/default/tplPower.htm
webinterface/src/web-data/tpl/default/tplSendMessage.htm
webinterface/src/web-data/tpl/default/tplServiceList.htm
webinterface/src/web-data/tpl/default/tplServiceListEPGItem.htm
webinterface/src/web-data/tpl/default/tplSignalPanel.htm
webinterface/src/web-data/tpl/default/tplSubServices.htm
webinterface/src/web-data/tpl/default/tplTimerEdit.htm
webinterface/src/web-data/tpl/default/tplTimerList.htm
webinterface/src/web-data/tpl/default/tplWebRemote.htm
webinterface/src/web-data/tpl/default/tplWebRemoteOld.htm
webinterface/src/web-data/userprefs.js [new file with mode: 0644]
webinterface/src/web-data/vlcplayer.js
webinterface/src/web/about.xml
webinterface/src/web/about2.xml [deleted file]
webinterface/src/web/autotimerlist.xml
webinterface/src/web/delfile.xml [deleted file]
webinterface/src/web/deviceinfo.xml [new file with mode: 0644]
webinterface/src/web/epgbouquet.xml
webinterface/src/web/epgnext.xml
webinterface/src/web/epgnow.xml
webinterface/src/web/epgsearch.rss.xml
webinterface/src/web/epgsearch.xml
webinterface/src/web/epgservice.xml
webinterface/src/web/epgservicenext.xml
webinterface/src/web/epgservicenow.xml
webinterface/src/web/getaudiotracks.xml
webinterface/src/web/getcurrent.xml
webinterface/src/web/getcurrlocation.xml
webinterface/src/web/getlocations.xml
webinterface/src/web/gettags.xml
webinterface/src/web/mediaplayerlist.xml
webinterface/src/web/message.xml
webinterface/src/web/messageanswer.xml
webinterface/src/web/moviedelete.xml
webinterface/src/web/movielist.html.xml
webinterface/src/web/movielist.rss.xml
webinterface/src/web/movielist.xml
webinterface/src/web/movietags.xml
webinterface/src/web/powerstate.xml
webinterface/src/web/remotecontrol.xml
webinterface/src/web/selectaudiotrack.xml
webinterface/src/web/servicelistreload.xml
webinterface/src/web/settings.xml
webinterface/src/web/subservices.xml
webinterface/src/web/timeradd.xml
webinterface/src/web/timeraddbyeventid.xml
webinterface/src/web/timerchange.xml
webinterface/src/web/timercleanup.xml
webinterface/src/web/timerdelete.xml
webinterface/src/web/timerlist.xml
webinterface/src/web/timerlistwrite.xml
webinterface/src/web/vol.xml
webinterface/src/web/wap/bouquets.html.xml [new file with mode: 0644]
webinterface/src/web/wap/epg.html.xml [new file with mode: 0644]
webinterface/src/web/wap/index.html.xml
webinterface/src/web/wap/power.html.xml
webinterface/src/web/wap/services.html.xml [new file with mode: 0644]
webinterface/src/web/wap/timeradd.xml
webinterface/src/web/wap/timerchange.html.xml
webinterface/src/web/wap/timerdelete.html.xml
webinterface/src/web/wap/timerlist.html.xml
webinterface/src/webif.py

index 4e4f285..b002773 100644 (file)
@@ -1,5 +1,5 @@
 Package: enigma2-plugin-extensions-webinterface
-Version: 1.5beta2
+Version: 1.5rc1
 Description: Control enigma2 with your Browser
 Section: extra
 Priority: optional
index 1c1b851..6baf0a2 100644 (file)
@@ -1,7 +1,4 @@
 * Remove all os.system calls
-* Fix potential security issues in all shell operations (deleting unwanted files etc)
-** done for IPKG.py, Screengrab.py
-* Decide whether the MediaPlayer Menu should stay and if how.
-* Fix some smaller IE Bugs
-** Exception on Movielist
-* Move Timer Cleaning to Python Side
\ No newline at end of file
+* Fix Timer Pre-/Posttime
+* Unixtimestamps in EPG Requests
+* Implement Timer Sanity Check with proper Handling on Webinterface side
\ No newline at end of file
index a99aa09..91cfe1c 100644 (file)
@@ -19,15 +19,15 @@ class HddInfo(Converter, object):
 
                if hdd is not None:
                        if self.type == self.MODEL:
-                               return "%s" %hdd.model()
+                               return "%s" % hdd.model()
                        elif self.type == self.CAPACITY:
-                               return "%s" %hdd.capacity()
+                               return "%s" % hdd.capacity()
                        elif self.type == self.FREE:
                                if hdd.free() > 1024:
                                        free = float(hdd.free()) / float(1024)
-                                       return "%.3f GB" %free
+                                       return "%.3f GB" % free
                                else:
-                                       return "%i MB" %hdd.free()
+                                       return "%i MB" % hdd.free()
 
                return _("N/A")
 
index 82245fd..ec4d220 100644 (file)
@@ -13,12 +13,12 @@ class NetworkInfo(Converter, object):
        def __init__(self, type):
                Converter.__init__(self, type)
                self.type = {
-                                        "Name" : self.NAME,                             
+                                        "Name" : self.NAME,                             
                                         "Mac" : self.MAC,
                                         "Dhcp" : self.DHCP,
                                         "Ip" : self.IP,
                                         "Gateway" : self.GATEWAY,
-                                        "Netmask" : self.NETMASK,                                       
+                                        "Netmask" : self.NETMASK,                                       
                                         }[type]
        
        @cached
@@ -41,4 +41,4 @@ class NetworkInfo(Converter, object):
                        return _("N/A")
        
        text = property(getText)
-       
\ No newline at end of file
+       
index 0cfc59b..1464917 100644 (file)
@@ -6,9 +6,9 @@ class SimpleResult(Converter, object):
        RESULTTEXT = 1
        
        def __init__(self, type):
-               Convert.__init__(self, type)
-               self.type = { "result" : self.RESULT,
-                                         "resulttext" : self.RESULTTEXT
+               Converter.__init__(self, type)
+               self.type = { "Result" : self.RESULT,
+                                         "ResultText" : self.RESULTTEXT
                                        }[type]
 
        @cached
@@ -16,10 +16,10 @@ class SimpleResult(Converter, object):
                result = self.source.result
                
                if self.type is self.RESULT:
-                       return result.result
+                       return str(result[0])
                elif self.type is self.RESULTTEXT:
-                       return result.resulttext
+                       return str(result[1])
                else:
-                       return _("N/A")
+                       return "N/A"
                
-       text = property(getText)
\ No newline at end of file
+       text = property(getText)
diff --git a/webinterface/src/WebComponents/Converter/VolumeInfo.py b/webinterface/src/WebComponents/Converter/VolumeInfo.py
new file mode 100644 (file)
index 0000000..4c0915c
--- /dev/null
@@ -0,0 +1,33 @@
+from Components.Converter.Converter import Converter
+from Components.Element import cached
+
+class VolumeInfo(Converter, object):
+       RESULT = 0
+       RESULTTEXT = 1
+       VOLUME = 2
+       ISMUTED = 3
+       
+       def __init__(self, type):
+               Converter.__init__(self, type)
+               self.type = { "Result" : self.RESULT,
+                                         "ResultText" : self.RESULTTEXT,
+                                         "Volume" : self.VOLUME,
+                                         "IsMuted" : self.ISMUTED
+                                       }[type]
+
+       @cached
+       def getText(self):
+               volume = self.source.volume
+               
+               if self.type is self.RESULT:
+                       return str(volume[0])
+               elif self.type is self.RESULTTEXT:
+                       return str(volume[1])
+               elif self.type is self.VOLUME:
+                       return str(volume[2])
+               elif self.type is self.ISMUTED:
+                       return str(volume[3])
+               else:
+                       return "N/A"
+               
+       text = property(getText)
index 5f188cf..38ceee8 100644 (file)
@@ -1,11 +1,11 @@
 # Code for the AutoTimerPlugin
 from Components.Sources.Source import Source
 
-class AT( Source ):
+class AT(Source):
        LIST = 0
        WRITE = 1
 
-       def __init__(self, session, func = LIST):
+       def __init__(self, session, func=LIST):
                print "AutoTimer: init: ", func
                Source.__init__(self)
                self.func = func
@@ -53,7 +53,7 @@ class AT( Source ):
                                timer.getExcludedShort(),
                                timer.getExcludedDescription(),
                                timer.getExcludedDays(),
-                       ))
+                                                                                               ))
 
                        #includes
                        innerList.extend((
@@ -61,19 +61,19 @@ class AT( Source ):
                                timer.getIncludedShort(),
                                timer.getIncludedDescription(),
                                timer.getIncludedDays(),
-                       ))
+                                                                                               ))
 
                        # services
                        innerList.extend((
                                timer.getServices(), # 11
                                timer.getBouquets() # 12
-                       ))
+                                                                                               ))
 
                        if timer.hasTimespan():
                                innerList.extend((
                                        timer.getTimespanBegin(), # 13
                                        timer.getTimespanEnd() # 14
-                               ))
+                                                                                               ))
                        else:
                                innerList.extend(("", "")) # 13, 14
 
@@ -86,7 +86,7 @@ class AT( Source ):
                                innerList.extend((
                                        timer.getCounter(), # 16
                                        timer.getCounterLeft() # 17
-                               ))
+                                                                                               ))
                        else:
                                innerList.extend((0, 0)) # 16, 17
 
@@ -106,7 +106,7 @@ class AT( Source ):
                                timer.getLastBegin(), # 21
                                timer.getJustplay(), # 22
                                timer.getAvoidDuplicateDescription() # 23
-                       ))
+                                                                                               ))
 
                        if timer.hasTags():
                                innerList.append(timer.getTags()) # 24
@@ -121,13 +121,13 @@ class AT( Source ):
 
                return returnList
 
-       def writeTimer(self,param):
-               print "writeTimer: ",param
+       def writeTimer(self, param):
+               print "writeTimer: ", param
                # TODO: fix error handling
                return
 
-       def command(self,param):
-               print "command: ",param
+       def command(self, param):
+               print "command: ", param
                return
 
                param = int(param)
@@ -136,30 +136,30 @@ class AT( Source ):
 
        list = property(timerList)
        lut = {"Name": 0
-                       ,"Match": 1
-                       ,"AfterEvent": 2
-                       ,"ExcludedTitle": 3
-                       ,"ExcludedShort": 4
-                       ,"ExcludedDescription": 5
-                       ,"ExcludedDays": 6
-                       ,"IncludedTitle": 7
-                       ,"IncludedShort": 8
-                       ,"IncludedDescription": 9
-                       ,"IncludedDays": 10
-                       ,"Services": 11
-                       ,"Bouquets": 12
-                       ,"TimespanBegin": 13
-                       ,"TimespanEnd": 14
-                       ,"Duration": 15
-                       ,"Counter": 16
-                       ,"CounterLeft": 17
-                       ,"CounterLimit": 18
-                       ,"Destination": 19
-                       ,"CounterFormatString": 20
-                       ,"LastBegin": 21
-                       ,"Justplay": 22
-                       ,"AvoidDuplicateDescription": 23
-                       ,"Tags": 24
-                       ,"Enabled": 25
-                       ,"toggleDisabledIMG": 26
+                       , "Match": 1
+                       , "AfterEvent": 2
+                       , "ExcludedTitle": 3
+                       , "ExcludedShort": 4
+                       , "ExcludedDescription": 5
+                       , "ExcludedDays": 6
+                       , "IncludedTitle": 7
+                       , "IncludedShort": 8
+                       , "IncludedDescription": 9
+                       , "IncludedDays": 10
+                       , "Services": 11
+                       , "Bouquets": 12
+                       , "TimespanBegin": 13
+                       , "TimespanEnd": 14
+                       , "Duration": 15
+                       , "Counter": 16
+                       , "CounterLeft": 17
+                       , "CounterLimit": 18
+                       , "Destination": 19
+                       , "CounterFormatString": 20
+                       , "LastBegin": 21
+                       , "Justplay": 22
+                       , "AvoidDuplicateDescription": 23
+                       , "Tags": 24
+                       , "Enabled": 25
+                       , "toggleDisabledIMG": 26
                        }
index 61d8e01..6d62b13 100644 (file)
@@ -12,29 +12,27 @@ from enigma import iServiceInformation
 
 from Components.config import config
 
-class About( Source):
+class About(Source):
        def __init__(self, session):
                Source.__init__(self)
                self.session = session
 
-       def handleCommand(self,cmd):
-               self.result = False,"unknown command"
+       def handleCommand(self, cmd):
+               self.result = False, "unknown command"
 
        def command(self):
-               list = []
-               list.append(about.getVersionString())
-
-               #Get Network Info
                def ConvertIP(list):
                        if(len(list) == 4):
-                               retstr = "%s.%s.%s.%s" %(list[0], list[1], list[2], list[3])
+                               retstr = "%s.%s.%s.%s" % (list[0], list[1], list[2], list[3])
                        else:
                                retstr = "0.0.0.0"
                        return retstr
+               
+               list = []
 
                if iNetwork.getNumberOfAdapters > 0:
                        iface = iNetwork.getAdapterList()[0]
-                       print "[WebComponents.About] iface: %s" %iface
+                       print "[WebComponents.About] iface: %s" % iface
                        list.append(iNetwork.getAdapterAttribute(iface, "mac"))
                        list.append(iNetwork.getAdapterAttribute(iface, "dhcp"))
                        list.append(ConvertIP(iNetwork.getAdapterAttribute(iface, "ip")))
@@ -48,135 +46,12 @@ class About( Source):
                        list.append("N/A")
                        list.append("N/A")
 
-               #Get FrontProcessor Version
-               fp_version = getFPVersion()
-               if fp_version is None:
-                       fp_version = "?"
-               else:
-                       fp_version = str(fp_version)
-               list.append(fp_version)
-
-               #Get Tuner Info
-               niminfo = ""
-               for nim in nimmanager.nimList():
-                       info = nim.split(":")
-
-                       niminfo += "\n\t\t\t<e2nim>\n"
-                       niminfo += "\t\t\t\t<name>%s</name>\n" %(info[0])
-                       niminfo += "\t\t\t\t<type>%s</type>\n" %(info[1])
-                       niminfo += "\t\t\t</e2nim>"
-
-               list.append(niminfo)
-
-               #Get HDD Info
-               if len(harddiskmanager.hdd):
-                       hdddata = harddiskmanager.hdd[0] # TODO, list more than the first harddisc if there are more than one. but this requires many changes in the way the webif generates the responses
-                       hddinfo = "\n\t\t\t<model>"+hdddata.model()+"</model>\n"
-                       hddinfo += "\t\t\t<capacity>"+hdddata.capacity()+"</capacity>\n"
-                       hddinfo += "\t\t\t<free>"+str(hdddata.free())+" MB</free>"
-                       list.append(hddinfo)
-               else:
-                       hddinfo = "\n\t\t\t<model>N/A</model>\n"
-                       hddinfo += "\t\t\t<capacity>-</capacity>\n"
-                       hddinfo += "\t\t\t<free>-</free>"
-                       list.append(hddinfo)
-
-               #Get Service Info
-               service = self.session.nav.getCurrentService()
-
-               if self.session.nav.getCurrentlyPlayingServiceReference() is not None:
-                       Name = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference()).getServiceName()
-               else:
-                       Name = "N/A"
-               list.append(Name)
-
-               if service is not None:
-                       svinfo = service.info()
-                       svfeinfo = service.frontendInfo()
-               else:
-                       svinfo = None
-                       svfeinfo = None
-
-               # Get Service Info
-               if self.session.nav.getCurrentlyPlayingServiceReference() is not None:
-                       list.append(svinfo.getInfoString(iServiceInformation.sProvider))
-
-                       aspect = svinfo.getInfo(iServiceInformation.sAspect)
-                       if aspect in ( 1, 2, 5, 6, 9, 0xA, 0xD, 0xE ):
-                               aspect = "4:3"
-                       else:
-                               aspect = "16:9"
-                       list.append(aspect)
-
-                       width = svinfo and svinfo.getInfo(iServiceInformation.sVideoWidth) or -1
-                       height = svinfo and svinfo.getInfo(iServiceInformation.sVideoHeight) or -1
-                       videosize = "%dx%d" %(width, height)
-                       list.append(videosize)
-
-                       list.append(hex(svinfo.getInfo(iServiceInformation.sNamespace)))
-
-                       # Get PIDs
-                       list.append(svinfo.getInfo(iServiceInformation.sVideoPID))
-                       list.append(svinfo.getInfo(iServiceInformation.sAudioPID))
-                       list.append(svinfo.getInfo(iServiceInformation.sPCRPID))
-                       list.append(svinfo.getInfo(iServiceInformation.sPMTPID))
-                       list.append(svinfo.getInfo(iServiceInformation.sTXTPID))
-                       list.append(svinfo.getInfo(iServiceInformation.sTSID))
-                       list.append(svinfo.getInfo(iServiceInformation.sONID))
-                       list.append(svinfo.getInfo(iServiceInformation.sSID))
-               else:
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-                       list.append("N/A")
-
-               ## webifversion
-               list.append(config.plugins.Webinterface.version.value)
-
-               #box model
-               fp = open("/proc/stb/info/model")
-               model = fp.read().lstrip().rstrip()
-               fp.close()
-               list.append(model)
-               #please remove unneeded debugoutpu while commiting #print list
-
-               listR = []
-               listR.append(list)
-
-               return listR
-
-       text = property(command)
+               return [list]
+       
        list = property(command)
-       lut = {"enigmaVersion": 0
-                       ,"lanMac": 1
-                       ,"lanDHCP": 2
-                       ,"lanIP": 3
-                       ,"lanMask": 4
-                       ,"lanGW": 5
-                       ,"fpVersion": 6
-                       ,"tunerInfo": 7
-                       ,"hddInfo": 8
-                       ,"serviceName": 9
-                       ,"serviceProvider": 10
-                       ,"serviceAspect": 11
-                       ,"serviceVideosize": 12
-                       ,"serviceNamespace": 13
-                       ,"vPID": 14
-                       ,"aPID": 15
-                       ,"pcrID": 16
-                       ,"pmtPID": 17
-                       ,"txtPID": 18
-                       ,"tsID": 19
-                       ,"onID": 20
-                       ,"sid": 21
-                       ,"WebIfVersion": 22
-                       ,"model": 23
-                       }
+       lut = { "lanMac": 0
+                       , "lanDHCP": 1
+                       , "lanIP": 2
+                       , "lanMask": 3
+                       , "lanGW": 4
+               }
index 8924feb..9085b1e 100644 (file)
@@ -1,11 +1,11 @@
 from Components.Sources.Source import Source
 from Tools.ISO639 import LanguageCodes
 
-class AudioTracks( Source ):
+class AudioTracks(Source):
        GET = 0
        SET = 1
 
-       text="False"
+       text = "False"
 
        def __init__(self, session, func=GET):
                self.cmd = None
@@ -25,7 +25,7 @@ class AudioTracks( Source ):
                        except ValueError:
                                cmd = -1
 
-                       print "COMMAND is %s" %self.cmd
+                       print "COMMAND is %s" % self.cmd
                        if self.session.nav.getCurrentService().audioTracks().getNumberOfTracks() > cmd and cmd >= 0:
                                audio.selectTrack(cmd)
                                return "Success"
@@ -46,7 +46,7 @@ class AudioTracks( Source ):
                        currentTrack = audio.getCurrentTrack()
 
                        if n > 0:
-                               print "[AudioTracks.py] got %s Audiotracks!" %(n)
+                               print "[AudioTracks.py] got %s Audiotracks!" % (n)
 
                                for x in range(n):
                                        i = audio.getTrackInfo(x)
index ad93cba..ceac03d 100644 (file)
@@ -2,22 +2,23 @@ from Components.Sources.Source import Source
 from ServiceReference import ServiceReference
 from enigma import eServiceCenter, eServiceReference, eEPGCache
 
-class EPG( Source):
-       BOUQUETNOW=0
-       BOUQUETNEXT=1
-       SERVICENOW=2
-       SERVICENEXT=3
-       SERVICE=4
-       TITLE=5
-       BOUQUET=6
-
-       def __init__(self, navcore, func=BOUQUETNOW):
+class EPG(Source):
+       BOUQUETNOW = 0
+       BOUQUETNEXT = 1
+       SERVICENOW = 2
+       SERVICENEXT = 3
+       SERVICE = 4
+       TITLE = 5
+       BOUQUET = 6
+       
+       def __init__(self, navcore, func=BOUQUETNOW, endtm=False):
                self.func = func
                Source.__init__(self)
                self.navcore = navcore
                self.epgcache = eEPGCache.getInstance()
-               self.command = None
-
+               self.command = None             
+               self.endtime = endtm
+                                       
        def handleCommand(self, cmd):
                self.command = cmd
 
@@ -53,7 +54,7 @@ class EPG( Source):
        def getServiceEPGNext(self, ref):
                return self.getEPGNowNext(ref, 1, True)
 
-       def getEPGNowNext(self, ref, type, service = False):
+       def getEPGNowNext(self, ref, type, service=False):
                print "[WebComponents.EPG] getting EPG NOW/NEXT", ref
 
                if service:
@@ -73,13 +74,35 @@ class EPG( Source):
                        return events
                return []
 
-       def getEPGofService(self, ref, options = 'IBDTSERN'):
+       def getEPGofService(self, ref, options='IBDTSERN'):
                print "getting EPG of Service", ref
-               events = self.epgcache.lookupEvent([options ,(ref,0,-1,-1)]);
+               events = self.epgcache.lookupEvent([options , (ref, 0, -1, -1)]);
                if events:
+                       if self.endtime:                                
+                               list = self.insertEndTime(events)
+                               return list
+                               
                        return events
                return []
 
+       def insertEndTime(self, events):
+               list = []
+               for event in events:
+                       i = 0
+                       evt = []
+                       end = event[1] + event[2]
+                       for item in event:
+                               if i == 3:
+                                       evt.append(end)                                 
+                                       i += 1
+                                                                                       
+                               evt.append(item)
+                               i += 1
+                       
+                       list.append(evt)
+               
+               return list
+
        def getEPGofBouquet(self, param):
                print "[WebComponents.EPG] getting EPG for Bouquet", param
                
@@ -111,11 +134,40 @@ class EPG( Source):
        def searchEvent(self, needle):
                print "[WebComponents.EPG] searching EPG: ", needle             
 
-               events = self.epgcache.search(('IBDTSERN',256,eEPGCache.PARTIAL_TITLE_SEARCH,needle,1));
+               events = self.epgcache.search(('IBDTSERN', 256, eEPGCache.PARTIAL_TITLE_SEARCH, needle, 1));
                if events:
                        return events
                return []
-
+       
+       def getLut(self):
+               if self.endtime:
+                       lut = { 
+                                       "EventID": 0,
+                                       "TimeStart": 1,
+                                       "Duration": 2,
+                                       "TimeEnd": 3,
+                                       "Title": 4,
+                                       "Description": 5,
+                                       "DescriptionExtended": 6,
+                                       "ServiceReference": 7,
+                                       "ServiceName": 8 
+                               }
+                       return lut
+               else:
+                       lut = { 
+                               "EventID": 0,
+                               "TimeStart": 1,
+                               "Duration": 2,
+                               "Title": 3,
+                               "Description": 4,
+                               "DescriptionExtended": 5,
+                               "ServiceReference": 6,
+                               "ServiceName": 7 
+                       }
+                       
+                       return lut
+       
        list = property(do_func)
-       lut = {"EventID": 0, "TimeStart": 1,"Duration": 2, "Title": 3, "Description": 4, "DescriptionExtended": 5, "ServiceReference": 6, "ServiceName": 7 }
-
+       
+       lut = property(getLut)
+               
\ No newline at end of file
index 239e965..1ccf8bd 100644 (file)
@@ -1,7 +1,6 @@
 from Components.Sources.Source import Source
 from Components.NimManager import nimmanager
 
-
 class Frontend(Source, object):
        def __init__(self):
                Source.__init__(self)
@@ -17,9 +16,8 @@ class Frontend(Source, object):
                return nims
                        
                        
-       list = property(getList)
-       
+       list = property(getList)        
        lut = {
                "Name" : 0,
                "Type" : 1
-       }
\ No newline at end of file
+       }
index 1303e4c..7dae817 100644 (file)
@@ -2,7 +2,7 @@ from Components.Sources.Source import Source
 from Components.Harddisk import harddiskmanager
 
 class Hdd(Source):
-       def __init__(self, devicecount = 0):
+       def __init__(self, devicecount=0):
                Source.__init__(self)
                self.devicecount = devicecount
 
@@ -17,27 +17,25 @@ class Hdd(Source):
        def getList(self):
                disks = []
                for hdd in harddiskmanager.hdd:
-                       model = "%s" %( hdd.model() )
-                       capacity = "%s" %( hdd.capacity() )
+                       model = "%s" % (hdd.model())
+                       capacity = "%s" % (hdd.capacity())
 
                        if hdd.free() <= 1024:
-                               free = "%i MB" %( hdd.free() )
+                               free = "%i MB" % (hdd.free())
                        else:
                                free = float(hdd.free()) / float(1024)
-                               free = "%.3f GB" %free
+                               free = "%.3f GB" % free
                        disk = [model, capacity, free]
                        disks.append(disk)
                
                return disks
                
                        
-       list = property(getList)
-       
+       list = property(getList)        
        lut = { "Model" : 0,
                        "Capacity" : 1,
                        "Free" : 2              
                }
 
-
        def destroy(self):
                Source.destroy(self)
index 160ae39..be0939a 100644 (file)
@@ -10,11 +10,11 @@ class LocationsAndTags(Source):
                self.func = func
                Source.__init__(self)
                self.session = session
-               self.result = False,"one two three four unknown command"
+               self.result = [ False, "one two three four unknown command" ]
 
        def handleCommand(self, cmd):
                if self.func is self.CURRLOCATION:
-                       self.result = [self.getCurrentLocation()]
+                       self.result = self.getCurrentLocation()
                elif self.func is self.LOCATIONS:
                        self.result = self.getLocations()
                elif self.func is self.TAGS:
@@ -40,14 +40,12 @@ class LocationsAndTags(Source):
                return tags
 
        def getText(self):
-               self.handleCommand(None)                
-               lst = self.result
-               xml = "<e2simplexmllist>\n"
+               self.handleCommand(None)
+
                if self.result:
-                       for ele in self.result:
-                               xml += "<e2simplexmlitem>%s</e2simplexmlitem>\n"%ele
-               xml += "</e2simplexmllist>\n"
-               return xml
+                       return str(self.result)
+               else:
+                       return ""
 
        def getList(self):
                self.handleCommand(None)
@@ -58,4 +56,4 @@ class LocationsAndTags(Source):
                return list
 
        text = property(getText)
-       list = property(getList)
\ No newline at end of file
+       simplelist = property(getList)
index 58c6e18..7a46191 100644 (file)
@@ -4,20 +4,20 @@ from ServiceReference import ServiceReference
 from Components.FileList import FileList
 from os import path as os_path
 
-class MP( Source):
+class MP(Source):
        LIST = 0
        PLAY = 1
        COMMAND = 3
        WRITEPLAYLIST = 4
 
-       def __init__(self, session,func = LIST):
+       def __init__(self, session, func=LIST):
                Source.__init__(self)
                self.func = func
                self.session = session
                error = "unknown command (%s)" % func
-               self.result = [[error,error,error]]
+               self.result = [[error, error, error]]
 
-       def handleCommand(self,cmd):
+       def handleCommand(self, cmd):
                self.cmd = cmd
                if self.func is self.LIST:
                        self.result = self.getFileList(cmd)
@@ -48,24 +48,24 @@ class MP( Source):
                except ImportError, ie:
                        return False
 
-       def getFileList(self,param):
-               print "getFileList:",param
+       def getFileList(self, param):
+               print "getFileList:", param
 
                returnList = []
 
                if param["path"] == "playlist":
                        # TODO: Fix dummy return if unable to load mp
                        if not self.tryOpenMP():
-                               returnList.append(["empty","True","playlist"])
+                               returnList.append(["empty", "True", "playlist"])
                                return returnList
 
                        mp = self.session.mediaplayer
                        if len(mp.playlist) != 0:
                                serviceRefList = mp.playlist.getServiceRefList()
                                for count in range(len(serviceRefList)):
-                                       returnList.append([serviceRefList[count].toString(),"True","playlist"])
+                                       returnList.append([serviceRefList[count].toString(), "True", "playlist"])
                        else:
-                               returnList.append(["empty","True","playlist"])
+                               returnList.append(["empty", "True", "playlist"])
 
                        return returnList
 
@@ -82,24 +82,24 @@ class MP( Source):
                else:
                        matchingPattern = param["types"]
 
-               filelist = FileList(param["path"], showDirectories = True, showFiles = True, matchingPattern = matchingPattern, useServiceRef = useServiceRef, isTop = False)
+               filelist = FileList(param["path"], showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
                list = filelist.getFileList()
                for x in list:
                        if useServiceRef == True:
                                if x[0][1] == False: #isDir
-                                       returnList.append([x[0][0].toString(),x[0][1],param["path"]])
+                                       returnList.append([x[0][0].toString(), x[0][1], param["path"]])
                                else:
-                                       returnList.append([x[0][0],x[0][1],param["path"]])
+                                       returnList.append([x[0][0], x[0][1], param["path"]])
                        else:
                                if x[0][1] == False: #isDir
-                                       returnList.append([param["path"]+x[0][0],x[0][1],param["path"]])
+                                       returnList.append([param["path"] + x[0][0], x[0][1], param["path"]])
                                else:
-                                       returnList.append([x[0][0],x[0][1],param["path"]])
+                                       returnList.append([x[0][0], x[0][1], param["path"]])
 
                return returnList
 
-       def playFile(self,param):
-               print "playFile: ",param
+       def playFile(self, param):
+               print "playFile: ", param
                # TODO: fix error handling
                if not self.tryOpenMP():
                        return
@@ -118,9 +118,9 @@ class MP( Source):
                mp.playlist.addFile(ref)
 
                #mp.playServiceRefEntry(ref)
-               print "len len(mp.playlist.getServiceRefList()): ",len(mp.playlist.getServiceRefList())
+               print "len len(mp.playlist.getServiceRefList()): ", len(mp.playlist.getServiceRefList())
                if len(mp.playlist.getServiceRefList()):
-                       lastEntry = len(mp.playlist.getServiceRefList()) -1
+                       lastEntry = len(mp.playlist.getServiceRefList()) - 1
                        currref = mp.playlist.getServiceRefList()[lastEntry]
                        if self.session.nav.getCurrentlyPlayingServiceReference() is None or currref != self.session.nav.getCurrentlyPlayingServiceReference():
                                self.session.nav.playService(mp.playlist.getServiceRefList()[lastEntry])
@@ -134,8 +134,8 @@ class MP( Source):
                mp.infoTimerFire()
                return
 
-       def writePlaylist(self,param):
-               print "writePlaylist: ",param
+       def writePlaylist(self, param):
+               print "writePlaylist: ", param
                filename = "playlist/%s.e2pls" % param
                from Tools.Directories import resolveFilename, SCOPE_CONFIG
 
@@ -146,8 +146,8 @@ class MP( Source):
                mp = self.session.mediaplayer
                mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
 
-       def command(self,param):
-               print "command: ",param
+       def command(self, param):
+               print "command: ", param
 
                # TODO: fix error handling
                if not self.tryOpenMP():
@@ -175,6 +175,6 @@ class MP( Source):
 
        list = property(getList)
        lut = {"ServiceReference": 0
-                       ,"IsDirectory": 1
-                       ,"Root": 2
+                       , "IsDirectory": 1
+                       , "Root": 2
                        }
index 3ed4d25..f466175 100644 (file)
@@ -2,66 +2,66 @@ from Components.Sources.Source import Source
 from Screens.MessageBox import MessageBox
 from os import system, path
 
-class Message( Source):
+class Message(Source):
        PRINT = 0
        ANSWER = 1
        yesnoFile = "/tmp/yesno"
 
-       def __init__(self,session, func = PRINT):
+       def __init__(self, session, func=PRINT):
                self.cmd = []
                self.session = session
 
                self.func = func
                Source.__init__(self)
                error = "unknown command (%s)" % func
-               self.result = [[False,error]]
+               self.res = [False, error]
 
-       def handleCommand(self,cmd):
+       def handleCommand(self, cmd):
                self.cmd = cmd
                if self.func is self.PRINT:
-                       self.result = self.printMessage(cmd)
+                       self.res = self.printMessage(cmd)
                elif self.func is self.ANSWER:
-                       self.result = self.getYesNoAnswer(cmd)
+                       self.res = self.getYesNoAnswer(cmd)
 
-       def printMessage(self,param):
+       def printMessage(self, param):
                print "printMessage"
 
                if self.cmd['text'] == "" or self.cmd['text'] is None:
-                       return [[False, "No Messagetext given"]]
+                       return [ False, "No Messagetext given" ]
                else:
                        mtext = self.cmd['text']
 
                try:
                        typeint = int(self.cmd['type'])
-               except ValueError,e:
-                       return [[False,"type %s is not a number"%self.cmd['type']]]
+               except ValueError, e:
+                       return [ False, "type %s is not a number" % self.cmd['type'] ]
 
                if typeint == MessageBox.TYPE_YESNO:
                        #dont know how to give the result to the webif back
-                       mtype= MessageBox.TYPE_YESNO
+                       mtype = MessageBox.TYPE_YESNO
                elif typeint == MessageBox.TYPE_INFO:
-                       mtype= MessageBox.TYPE_INFO
+                       mtype = MessageBox.TYPE_INFO
                elif typeint == MessageBox.TYPE_WARNING:
-                       mtype= MessageBox.TYPE_WARNING
+                       mtype = MessageBox.TYPE_WARNING
                elif typeint == MessageBox.TYPE_ERROR:
-                       mtype= MessageBox.TYPE_ERROR
+                       mtype = MessageBox.TYPE_ERROR
                else:
-                       return [[ False, "Unsupported Messagetype %s" %self.cmd['type'] ]]
+                       return [ False, "Unsupported Messagetype %s" % self.cmd['type'] ]
 
                try:
                        mtimeout = int(self.cmd['timeout'])
-               except ValueError,e:
+               except ValueError, e:
                        mtimeout = -1
 
                if typeint == MessageBox.TYPE_YESNO:
-                       self.session.openWithCallback(self.yesNoAnswer, MessageBox, mtext, type = mtype, timeout = mtimeout)
+                       self.session.openWithCallback(self.yesNoAnswer, MessageBox, mtext, type=mtype, timeout=mtimeout)
                else:
-                       self.session.open(MessageBox, mtext, type = mtype ,timeout = mtimeout)
+                       self.session.open(MessageBox, mtext, type=mtype , timeout=mtimeout)
 
-               return [[True, "Message sent successfully!"]]
+               return [ True, "Message sent successfully!" ]
 
        def yesNoAnswer(self, confirmed):
-               print "yesNoAnswer",confirmed
+               print "yesNoAnswer", confirmed
                #self.session.messageboxanswer = confirmed
 
                yesnoFile = self.yesnoFile
@@ -72,7 +72,7 @@ class Message( Source):
 
                system(cmdstr)
 
-       def getYesNoAnswer(self,param):
+       def getYesNoAnswer(self, param):
                print "getYesNoAnswer"#,self.session.messageboxanswer
                yesnoFile = self.yesnoFile
                if path.exists(yesnoFile) == True:
@@ -81,19 +81,15 @@ class Message( Source):
                        file.close()
                        cmdstr = "rm %s" % yesnoFile
                        system(cmdstr)
-                       print "Answer: (%s)"%lines[0]
+                       print "Answer: (%s)" % lines[0]
                        if lines[0] == "yes":
-                               return [[True,"Answer is YES!"]]
+                               return [ True, "Answer is YES!" ]
                        else:
-                               return [[True,"Answer is NO!"]]
+                               return [ True, "Answer is NO!" ]
                else:
-                       return [[False,"No answer in time"]]
-
-       def getResults(self):
-               return self.result
-
-       list = property(getResults)
-       lut = {"Result": 0
-                       ,"ResultText": 1
-                       }
-
+                       return [ False, "No answer in time" ]
+       
+       def getResult(self):
+               return self.res
+               
+       result = property(getResult)
index a28325d..ffbcff1 100644 (file)
@@ -7,12 +7,12 @@ from Tools.FuzzyDate import FuzzyTime
 
 from os import stat as os_stat
 
-class Movie( Source):
+class Movie(Source):
        LIST = 0
        DEL = 1
        TAGS = 2
 
-       def __init__(self, session, movielist, func = LIST):
+       def __init__(self, session, movielist, func=LIST):
                Source.__init__(self)
                self.func = func
                self.session = session
@@ -21,13 +21,13 @@ class Movie( Source):
                self.movielist = movielist #MovieList(self.root)
                self.movielist.load(self.root, None)
                self.cmd = ""
-               self.result = False, "Missing or Wrong Argument"
+               self.res = [ False, "Missing or Wrong Argument" ]
 
        def handleCommand(self, cmd):
                if cmd is not None:
                        self.cmd = cmd
                        if self.func is self.DEL:
-                               self.result = self.delMovie(cmd)
+                               self.res = self.delMovie(cmd)
                        elif self.func is self.LIST:
                                if cmd['dirname']:
                                        self.root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + cmd['dirname'])
@@ -54,15 +54,15 @@ class Movie( Source):
                                        result = True
 
                        if result == False:
-                               return result, "Could not delete Movie '%s'" %name
+                               return [ result, "Could not delete Movie '%s'" % name ]
                        else:
-                               return result, "Movie '%s' deleted" %name
+                               return [ result, "Movie '%s' deleted" % name ]
 
-               return result, "Illegal Parameter Value: sRef - '%s'" %param
+               return [ result, "Illegal Parameter Value: sRef - '%s'" % param ]
 
-       def command(self):
-               self.movielist.reload(root=self.root,filter_tags = self.tagfilter)
-               list=[]
+       def getMovieList(self):
+               self.movielist.reload(root=self.root, filter_tags=self.tagfilter)
+               list = []
 
                tag = self.cmd['tag']
                tag = tag and tag.lower()
@@ -82,15 +82,15 @@ class Movie( Source):
                                else:
                                        len = "?:??"
                        else:
-                               len="disabled"
+                               len = "disabled"
 
-                       sourceERef =info.getInfoString(serviceref, iServiceInformation.sServiceref)
-                       sourceRef= ServiceReference(sourceERef)
+                       sourceERef = info.getInfoString(serviceref, iServiceInformation.sServiceref)
+                       sourceRef = ServiceReference(sourceERef)
 
                        event = info.getEvent(serviceref)
                        ext = event and event.getExtendedDescription() or ""
 
-                       filename = "/"+"/".join(serviceref.toString().split("/")[1:])
+                       filename = "/" + "/".join(serviceref.toString().split("/")[1:])
 
                        if not tag or tag in info.getInfoString(serviceref, iServiceInformation.sTags).lower():
                                """ add movie only to list, if a given tag is applied to the movie """
@@ -109,36 +109,25 @@ class Movie( Source):
                                ])
                return list
 
-       def getText(self):
+       def getResult(self):
                if self.func is self.DEL:
-                       (result, text) = self.result
-                       xml = "<e2simplexmlresult>\n"
-                       if result:
-                               xml += "<e2state>True</e2state>\n"
-                       else:
-                               xml += "<e2state>False</e2state>\n"
-                       xml += "<e2statetext>%s</e2statetext>\n" % text
-                       xml += "</e2simplexmlresult>\n"
-                       return xml
-               elif self.func is self.TAGS:
-                       xml = "<e2movietags>\n"
-                       for tag in self.movielist.tags:
-                               xml += "<e2movietag>%s</e2movietag>\n"%tag
-                       xml += "</e2movietags>\n"
-                       return xml
-
-       text = property(getText)
-
-       list = property(command)
+                       return self.res
+               
+               return [ False, "illegal call" ]
+       
+       
+       result = property(getResult)    
+
+       list = property(getMovieList)
        lut = {"ServiceReference": 0
-                       ,"Title": 1
-                       ,"Description": 2
-                       ,"Time": 3
-                       ,"TimeString": 4
-                       ,"Length": 5
-                       ,"ServiceName": 6
-                       ,"Tags": 7
-                       ,"DescriptionExtended": 8
-                       ,"Filename": 9
-                       ,"Filesize": 10
+                       , "Title": 1
+                       , "Description": 2
+                       , "Time": 3
+                       , "TimeString": 4
+                       , "Length": 5
+                       , "ServiceName": 6
+                       , "Tags": 7
+                       , "DescriptionExtended": 8
+                       , "Filename": 9
+                       , "Filesize": 10
                }
index 2abb356..d61f858 100644 (file)
@@ -14,7 +14,7 @@ class Network(Source):
        LAN = 0
        WLAN = 1
        
-       def __init__(self, device = LAN):
+       def __init__(self, device=LAN):
                Source.__init__(self)
                if device is self.LAN:
                        self.iface = "eth0"
@@ -24,7 +24,7 @@ class Network(Source):
 
        def ConvertIP(self, list):
                if(len(list) == 4):
-                       retstr = "%s.%s.%s.%s" %(list[0], list[1], list[2], list[3])
+                       retstr = "%s.%s.%s.%s" % (list[0], list[1], list[2], list[3])
                else:
                        retstr = "0.0.0.0"
                return retstr
@@ -32,7 +32,7 @@ class Network(Source):
                
        def getInterface(self):
                iface = Interface(self.iface)
-               iface.mac =  iNetwork.getAdapterAttribute(self.iface, "mac")
+               iface.mac = iNetwork.getAdapterAttribute(self.iface, "mac")
                iface.dhcp = iNetwork.getAdapterAttribute(self.iface, "dhcp")
                iface.ip = self.ConvertIP(iNetwork.getAdapterAttribute(self.iface, "ip"))
                iface.netmask = self.ConvertIP(iNetwork.getAdapterAttribute(self.iface, "netmask"))
@@ -71,4 +71,4 @@ class Network(Source):
        
        
        def destroy(self):
-               Source.destroy(self)
\ No newline at end of file
+               Source.destroy(self)
index 506bed0..aeedf7e 100644 (file)
@@ -3,7 +3,7 @@ from Components.ParentalControl import parentalControl
 from Components.config import config
 from ServiceReference import ServiceReference
 
-class ParentControl( Source):
+class ParentControl(Source):
        def __init__(self, session):
                Source.__init__(self)
                self.session = session
@@ -21,13 +21,13 @@ class ParentControl( Source):
                                servicelist = parentalControl.blacklist
 
                        for service_ref in servicelist:
-                               list.append( [str(service_ref),ServiceReference(service_ref).getServiceName()] )
+                               list.append([str(service_ref), ServiceReference(service_ref).getServiceName()])
 
-               print "list",list
+               print "list", list
                return list
 
        list = property(command)
        lut = {"ServiceReference": 0
-                       ,"ServiceName":1
+                       , "ServiceName":1
                        }
 
index b17fcd3..8d11614 100644 (file)
@@ -1,7 +1,7 @@
 from Components.Sources.Source import Source
 
 class PowerState(Source):
-       def __init__(self,session):
+       def __init__(self, session):
                self.cmd = None
                self.session = session
                Source.__init__(self)
@@ -9,10 +9,16 @@ class PowerState(Source):
        def handleCommand(self, cmd):
                self.cmd = cmd
 
-       def do_func(self):
+       def getStandby(self):
+               from Screens.Standby import inStandby
+               if inStandby == None:
+                       return "false"
+               else:
+                       return "true"
+
+       def getText(self):
                if self.cmd == "" or self.cmd is None:
-                       print "[PowerState.py] cmd was empty or None"
-                       return "error"
+                       return self.getStandby()
 
                #-1: get current state
                # 0: toggle standby
@@ -22,11 +28,7 @@ class PowerState(Source):
                try:
                        type = int(self.cmd)
                        if type == -1:
-                               from Screens.Standby import inStandby
-                               if inStandby == None:
-                                       return "false"
-                               else:
-                                       return "true"
+                               return self.getStandby()
 
                        elif type == 0:
                                print "[PowerState.py] Standby 0"
@@ -50,4 +52,4 @@ class PowerState(Source):
                except ValueError:
                        return "error"
 
-       text = property(do_func)
+       text = property(getText)
index 0e758b4..0dfa02b 100644 (file)
@@ -1,39 +1,40 @@
 from struct import pack
 from Components.Sources.Source import Source
 
-class RemoteControl( Source):
-       def __init__(self,session):
+class RemoteControl(Source):
+       def __init__(self, session):
                self.cmd = None
                self.session = session
                Source.__init__(self)
-
+               self.res = [ False, "Missing or wrong argument" ]
+               
        def handleCommand(self, cmd):
                self.cmd = cmd
+               self.res = self.sendEvent()
 
-       def do_func(self):
-               list = []
-
+       def sendEvent(self):
                if self.cmd == "" or self.cmd is None:
                        print "[RemoteControl.py] cmd is empty or None"
-                       return [[False,"Missing or wrong argument"]]
+                       return self.res
 
                type = int(self.cmd)
                if type <= 0:
                        print "[RemoteControl.py] command <= 0 (%s)" % type
-                       return [[False,"the command was not greater 0"]]
+                       return  [ False, "the command was not > 0" ]
 
-               dataon = pack('iiHHi',0,0,1,type,1)
-               dataoff = pack('iiHHi',0,0,1,type,0)
+               dataon = pack('iiHHi', 0, 0, 1, type, 1)
+               dataoff = pack('iiHHi', 0, 0, 1, type, 0)
 
-               fp=open("/dev/input/event1", 'wb')
+               fp = open("/dev/input/event1", 'wb')
                fp.write(dataon)
                fp.write(dataoff)
                fp.close()
 
                print "[RemoteControl.py] command was was sent (%s)" % type
-               return [[True, "command was was sent"]]
-
-       list = property(do_func)
-       lut = {"Result": 0
-                       ,"ResultText": 1
-                       }
+               return [ True, "command was was sent" ]
+       
+       def getResult(self):
+               return self.res
+       
+       
+       result = property(getResult)
index a07b5e3..c49a004 100644 (file)
@@ -13,7 +13,7 @@ class RequestData(Source):
        REMOTETYPE = 6
        URI = 7
 
-       def __init__(self, request, what = None):
+       def __init__(self, request, what=None):
                Source.__init__(self)
                self.request = request
                self.what = what
index 4eb1da7..1754b34 100644 (file)
@@ -3,10 +3,10 @@ from Components.Sources.ServiceList import ServiceList
 from Screens.ChannelSelection import service_types_tv
 from enigma import eServiceReference
 
-class ServiceListRecursive( Source ):
+class ServiceListRecursive(Source):
        FETCH = 0
        
-       def __init__(self, session, func = FETCH):
+       def __init__(self, session, func=FETCH):
                Source.__init__(self)
                
                self.session = session
@@ -15,7 +15,7 @@ class ServiceListRecursive( Source ):
                self.xml = ""
                self.command = eServiceReference(service_types_tv + ' FROM BOUQUET "bouquets.tv" ORDER BY bouquet')
        
-       def handleCommand(self,cmd):
+       def handleCommand(self, cmd):
                self.command = eServiceReference(cmd)
        
        def do_func(self):
@@ -27,7 +27,7 @@ class ServiceListRecursive( Source ):
                return func(self.command)
        
        def buildList(self, ref):
-               self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
+               self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False)
                list = self.servicelist.getServicesAsList()
                for index in range(len(list)): 
                        item = list[index]
@@ -43,14 +43,14 @@ class ServiceListRecursive( Source ):
                                subxml = ""
                                for (ref, name) in sub:
                                        subxml += "\t\t\t<e2service>\n"
-                                       subxml += "\t\t\t\t<e2servicereference>%s</e2servicereference>\n\t\t\t\t<e2servicename>%s</e2servicename>\n" %(self.filterXML(ref), self.filterXML(name))
+                                       subxml += "\t\t\t\t<e2servicereference>%s</e2servicereference>\n\t\t\t\t<e2servicename>%s</e2servicename>\n" % (self.filterXML(ref), self.filterXML(name))
                                        subxml += "\t\t\t</e2service>\n"
                        
                        else:
                                self.xml += "\t\t<e2service>\n"
                                bouquet = False
                        
-                       self.xml += "\t\t<e2servicereference>%s</e2servicereference>\n\t\t<e2servicename>%s</e2servicename>\n" %(self.filterXML(item[0]), self.filterXML(item[1]))
+                       self.xml += "\t\t<e2servicereference>%s</e2servicereference>\n\t\t<e2servicename>%s</e2servicename>\n" % (self.filterXML(item[0]), self.filterXML(item[1]))
                        
                        if bouquet:
                                self.xml += "\t\t<e2servicelist>\n"
index 46077a2..7a98ea3 100644 (file)
@@ -1,7 +1,7 @@
 from enigma import eDVBDB
 from Components.Sources.Source import Source
 
-class ServiceListReload( Source):
+class ServiceListReload(Source):
        BOTH = 0
        LAMEDB = 1
        USERBOUQUETS = 2
@@ -10,43 +10,36 @@ class ServiceListReload( Source):
                Source.__init__(self)
                self.session = session
                self.eDVBDB = eDVBDB.getInstance()
+               self.res = False
 
-       def handleCommand(self,cmd):
+       def handleCommand(self, cmd):
                try:
                        self.cmd = int(cmd)
                        if self.cmd is self.BOTH:
                                self.reloadLameDB()
                                self.reloadUserBouquets()
-                               self.result = [['true','reloaded both']]
+                               self.res = [ True, 'reloaded both' ]
                        elif self.cmd is self.LAMEDB:
-                               self.result = self.reloadLameDB()
-                               self.result = [['true','reloaded lamedb']]
+                               self.res = self.reloadLameDB()
+                               self.res = [ True, 'reloaded lamedb' ]
                        elif self.cmd is self.USERBOUQUETS:
-                               self.result = self.reloadUserBouquets()
-                               self.result = [['true','reloaded bouquets']]
-                       else:
-                               self.result = False # results in message generated in getList
-               except Exception,e:
-                       self.result = False # results in message generated in getList
+                               self.res = self.reloadUserBouquets()
+                               self.res = [ True, 'reloaded bouquets' ]                                
+               except Exception, e:
+                       pass
 
        def reloadLameDB(self):
-               print "[WebInterface] reloading lamedb"
+               print "[ServiceListReload] reloading lamedb"
                self.eDVBDB.reloadServicelist()
 
        def reloadUserBouquets(self):
-               print "[WebInterface] reloading userbouquets"
+               print "[ServiceListReload] reloading userbouquets"
                self.eDVBDB.reloadBouquets()
 
-       def getList(self):
-               try:
-                       if self.result:
-                               return self.result
-                       else:
-                               raise AttributeError
-               except AttributeError:
-                       return [['false',"missing or wrong parameter mode [%i=both, %i=lamedb only, %i=userbouqets only]"%(self.BOTH,self.LAMEDB,self.USERBOUQUETS) ]]
+       def getResult(self):
+               if self.res:
+                       return self.res
+               else:
+                       return [ False, "missing or wrong parameter mode [%i=both, %i=lamedb only, %i=userbouqets only]" % (self.BOTH, self.LAMEDB, self.USERBOUQUETS) ]
 
-       list = property(getList)
-       lut = {"result": 0
-                       ,"mode": 1
-                       }
+       result = property(getResult)
index d263636..e4001d8 100644 (file)
@@ -2,7 +2,7 @@ from Components.config import config
 from Components.Sources.Source import Source
 
 class Settings(Source):
-       def __init__(self,session):
+       def __init__(self, session):
                self.cmd = []
                self.session = session
                Source.__init__(self)
@@ -11,7 +11,7 @@ class Settings(Source):
                self.cmd = cmd
 
        def do_func(self):
-               result=[]
+               result = []
                self.pickle_this("config", config.saved_value, result)
                return result
 
@@ -21,11 +21,11 @@ class Settings(Source):
                        if isinstance(val, dict):
                                self.pickle_this(name, val, result)
                        elif isinstance(val, tuple):
-                               result.append([name,val[0]])
+                               result.append([name, val[0]])
                        else:
-                               result.append([name,val])
+                               result.append([name, val])
 
        list = property(do_func)
        lut = {"Name": 0
-                       ,"Value": 1
+                       , "Value": 1
                        }
index ed0ed38..0fe6127 100644 (file)
@@ -6,7 +6,12 @@ class SubServices(Source):
        def __init__(self, session):
                Source.__init__(self)
                self.session = session
-
+       
+       def handleCommand(self, cmd):
+               if cmd is not None:
+                       #TODO some logic here
+                       pass
+       
        def command(self):
                print "SubServices was called"
                list = []
@@ -16,9 +21,9 @@ class SubServices(Source):
                list0 = []
                currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference()
                if currentServiceRef is not None:
-                       list.append( [currentServiceRef.toString(),
+                       list.append([currentServiceRef.toString(),
                                                 ServiceReference(currentServiceRef).getServiceName()]
-                       )
+                                                )
 
                        currentService = self.session.nav.getCurrentService()
                        subservices = currentService and currentService.subServices()
@@ -31,11 +36,11 @@ class SubServices(Source):
                else:
                        list.append(["N/A", "N/A"])
 
-               print "SubServices is returning list ",list
+               print "SubServices is returning list ", list
                return list
 
        list = property(command)
-       lut = {"ServiceReference": 0
-                       ,"Name": 1
+       lut = {"ServiceReference": 0,
+                       "Name": 1
                        }
 
index d5756ca..e6b135b 100644 (file)
@@ -9,7 +9,7 @@ from Components.config import config
 from xml.sax.saxutils import unescape
 from time import time, strftime, localtime, mktime
 
-class Timer( Source):
+class Timer(Source):
        LIST = 0
        ADDBYID = 1
        ADD = 2
@@ -20,52 +20,52 @@ class Timer( Source):
        RECNOW = 7
        CLEANUP = 8
 
-       def __init__(self, session, func = LIST):
+       def __init__(self, session, func=LIST):
                self.func = func
                Source.__init__(self)
                self.session = session
                self.recordtimer = session.nav.RecordTimer
                self.epgcache = eEPGCache.getInstance()
-               self.result = False, "unknown command"
+               self.res = [ False, "unknown command" ]
 
        def handleCommand(self, cmd):
                if self.func is self.ADDBYID:
-                       self.result = self.addTimerByEventID(cmd)
+                       self.res = self.addTimerByEventID(cmd)
                        self.writeTimerList()
                        
                elif self.func is self.ADD:
-                       self.result = self.editTimer(cmd)
+                       self.res = self.editTimer(cmd)
                        self.writeTimerList()
                        
                elif self.func is self.TVBROWSER:
-                       self.result = self.tvBrowser(cmd)
+                       self.res = self.tvBrowser(cmd)
                        self.writeTimerList()
                        
                elif self.func is self.DEL:
-                       self.result = self.delTimer(cmd)
+                       self.res = self.delTimer(cmd)
                        self.writeTimerList()
                        
                elif self.func is self.CHANGE:
-                       self.result = self.editTimer(cmd)
+                       self.res = self.editTimer(cmd)
                        self.writeTimerList()
                        
                elif self.func is self.WRITE:
-                       self.result = self.writeTimerList(force=True)
+                       self.res = self.writeTimerList(force=True)
                        
                elif self.func is self.RECNOW:                  
-                       self.result = self.recordNow(cmd)       
+                       self.res = self.recordNow(cmd)  
                                        
                elif self.func is self.CLEANUP:
-                       self.result = self.cleanupTimer()
+                       self.res = self.cleanupTimer()
                                        
                else:
-                       self.result = False, "Unknown function: '%s'" %(self.func)
+                       self.res = [ False, "Unknown function: '%s'" % (self.func) ]
 
        def cleanupTimer(self):
                print "[WebComponents.Timer] cleanupTimer"
                
                self.session.nav.RecordTimer.cleanup()
-               return True, "List of Timers has been cleaned"
+               return [ True, "List of Timers has been cleaned" ]
                
 
        def delTimer(self, param):
@@ -74,25 +74,25 @@ class Timer( Source):
                if param.has_key('sRef'):
                        service_ref = ServiceReference(param['sRef'])
                else:
-                       return False, "Missing Parameter: sRef"
+                       return [ False, "Missing Parameter: sRef" ]
 
                if param.has_key('begin'):
                        begin = int(float(param['begin']))
                else:
-                       return False, "Missing Parameter: begin"
+                       return [ False, "Missing Parameter: begin" ]
 
                if param.has_key('end'):
                        end = int(float(param['end']))
                else:
-                       return False, "Missing Parameter: end"
+                       return [ False, "Missing Parameter: end" ]
 
                try:
                        for timer in self.recordtimer.timer_list + self.recordtimer.processed_timers:
                                if str(timer.service_ref) == str(service_ref) and int(timer.begin) == begin and int(timer.end) == end:
                                        self.recordtimer.removeEntry(timer)
-                                       return True, "The timer '%s' has been deleted successfully" %(timer.name)
+                                       return True, "The timer '%s' has been deleted successfully" % (timer.name)
                except:
-                       return False, "The timer has NOT been deleted"
+                       return [ False, "The timer has NOT been deleted" ]
 
                return False, "No matching Timer found"
 
@@ -112,24 +112,24 @@ class Timer( Source):
                """
                print "[WebComponents.Timer] tvbrowser"
 
-               listDate = ['year','month','day','shour','smin','ehour','emin']
+               listDate = ['year', 'month', 'day', 'shour', 'smin', 'ehour', 'emin']
                for element in listDate:
                        if param[element] is None:
-                               if param['s'+element] is None:
-                                       return False,"%s missing"%element
+                               if param['s' + element] is None:
+                                       return [ False, "%s missing" % element ]
                                else:
-                                       param[element] = int(param['s'+element])
+                                       param[element] = int(param['s' + element])
                        else:
                                param[element] = int(param[element])
-               param['begin'] = int(mktime( (param['year'], param['month'], param['day'], param['shour'], param['smin'], 0, 0, 0, -1) ) )
-               param['end']    = int(mktime( (param['year'], param['month'], param['day'], param['ehour'], param['emin'], 0, 0, 0, -1) ) )
+               param['begin'] = int(mktime((param['year'], param['month'], param['day'], param['shour'], param['smin'], 0, 0, 0, -1)))
+               param['end']     = int(mktime((param['year'], param['month'], param['day'], param['ehour'], param['emin'], 0, 0, 0, -1)))
                if param['end'] < param['begin']:
                        param['end'] += 86400
                for element in listDate:
                        del param[element]
 
                if param['sRef'] is None:
-                       return False, "Missing Parameter: sRef"
+                       return [ False, "Missing Parameter: sRef" ]
                else:
                        takeApart = param['sRef'].split('|')
                        if len(takeApart) > 1:
@@ -137,7 +137,7 @@ class Timer( Source):
 
                repeated = int(param.get('repeated') or 0)
                if repeated == 0:
-                       list = ["mo","tu","we","th","fr","sa","su","ms","mf"]
+                       list = ["mo", "tu", "we", "th", "fr", "sa", "su", "ms", "mf"]
                        for element in list:
                                if param.has_key(element):
                                        number = param[element] or 0
@@ -157,10 +157,10 @@ class Timer( Source):
                        del param['command']
                        return self.editTimer(param)
                else:
-                       return False, "Unknown command: '%s'" %param['command']
+                       return [ False, "Unknown command: '%s'" % param['command'] ]
 
        def recordNow(self, param):
-               ret = (True, "Instant record for current Event started")
+               ret = [ True, "Instant record for current Event started" ]
                
                limitEvent = True
                if param == "undefinitely" or param == "infinite":
@@ -193,11 +193,11 @@ class Timer( Source):
                                
                else:
                        if limitEvent:
-                               ret = (False, "No event found! Not recording!")
+                               ret = [ False, "No event found! Not recording!" ]
                
                if ret[0]:
                        location = config.movielist.last_videodir.value
-                       timer = RecordTimerEntry(serviceref, begin, end, name, description, eventid, False, False, 0, dirname = location)
+                       timer = RecordTimerEntry(serviceref, begin, end, name, description, eventid, False, False, 0, dirname=location)
                        timer.dontSave = True
                        self.recordtimer.record(timer)
                
@@ -221,16 +221,16 @@ class Timer( Source):
                if param.has_key('sRef'):
                        service_ref = ServiceReference(param['sRef'])
                else:
-                       return False, "Missing Parameter: sRef"
+                       return [ False, "Missing Parameter: sRef" ]
 
                repeated = int(param.get('repeated') or 0)
 
                if not param.has_key('begin'):
-                       return False, "Missing Parameter: begin"
+                       return [ False, "Missing Parameter: begin" ]
                begin = int(float(param['begin']))
 
                if not param.has_key('end'):
-                       return False, "Missing Parameter: end"
+                       return [ False, "Missing Parameter: end" ]
                end = int(float(param['end']))
 
                tm = time()
@@ -239,17 +239,17 @@ class Timer( Source):
                elif tm > begin and tm < end and repeated == 0:
                        begin = time()
                elif repeated == 0:
-                       return False, "Illegal Parameter value for Parameter begin : '%s'" %begin
+                       return [ False, "Illegal Parameter value for Parameter begin : '%s'" % begin ]
 
                if param.has_key('name'):
                        name = param['name']
                else:
-                       return False, "Missing Parameter: name"
+                       return [ False, "Missing Parameter: name" ]
 
                if param.has_key('description'):
                        description = param['description'].replace("\n", " ")
                else:
-                       return False, "Missing Parameter: description"
+                       return [ False, "Missing Parameter: description" ]
 
                disabled = False #Default to: Enabled
                if param.has_key('disabled'):
@@ -262,11 +262,11 @@ class Timer( Source):
                justplay = False #Default to: Record
                if param.has_key('justplay'):
                        if param['justplay'] == "1":
-                               justplay =  True
+                               justplay = True
 
                afterEvent = 3 #Default to Afterevent: Auto
                if param.has_key('afterevent'):
-                       if ( param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"):
+                       if (param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"):
                                afterEvent = int(param['afterevent'])
 
                dirname = config.movielist.last_timer_videodir.value
@@ -286,19 +286,19 @@ class Timer( Source):
                        if param.has_key('channelOld') and param['channelOld'] != '':
                                channelOld = ServiceReference(param['channelOld'])
                        else:
-                               return False, "Missing Parameter: channelOld"
+                               return [ False, "Missing Parameter: channelOld" ]
                        # We do need all of the following Parameters, too, for being able of finding the Timer.
                        # Therefore so we can neither use default values in this part nor can we
                        # continue if a parameter is missing
                        if param.has_key('beginOld'):
                                beginOld = int(param['beginOld'])
                        else:
-                               return False, "Missing Parameter: beginOld"
+                               return [ False, "Missing Parameter: beginOld" ]
 
                        if param.has_key('endOld'):
                                endOld = int(param['endOld'])
                        else:
-                               return False, "Missing Parameter: endOld"
+                               return [ False, "Missing Parameter: endOld" ]
 
                        #let's try to find the timer
                        try:
@@ -323,34 +323,34 @@ class Timer( Source):
                                                                #send the changed timer back to enigma2 and hope it's good
                                                                self.session.nav.RecordTimer.timeChanged(timer)
                                                                print "[WebComponents.Timer] editTimer: Timer changed!"
-                                                               return True, "Timer %s has been changed!" %(timer.name)
+                                                               return [ True, "Timer %s has been changed!" % (timer.name) ]
                        except:
                                #obviously some value was not good, return an error
-                               return False, "Changing the timer for '%s' failed!" %name
+                               return [ False, "Changing the timer for '%s' failed!" % name ]
 
-                       return False, "Could not find timer '%s' with given start and end time!" %name
+                       return [ False, "Could not find timer '%s' with given start and end time!" % name ]
 
                #Try adding a new Timer
 
                try:
                        #Create a new instance of recordtimerentry
-                       timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname = dirname, tags = tags)
+                       timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname=dirname, tags=tags)
                        timer.repeated = repeated
                        #add the new timer
                        self.recordtimer.record(timer)
-                       return True, "Timer added successfully!"
+                       return [ True, "Timer added successfully!" ]
                except:
                        #something went wrong, most possibly one of the given paramater-values was wrong
-                       return False, "Could not add timer '%s'!" %name
+                       return [ False, "Could not add timer '%s'!" % name ]
 
-               return False, "Unexpected Error"
+               return [ False, "Unexpected Error" ]
 
        def addTimerByEventID(self, param):
                print "[WebComponents.Timer] addTimerByEventID", param
                if param['sRef'] is None:
-                       return False, "Missing Parameter: sRef"
+                       return [ False, "Missing Parameter: sRef" ]
                if param['eventid'] is None:
-                       return False, "Missing Parameter: eventid"
+                       return [ False, "Missing Parameter: eventid" ]
 
                justplay = False
                if param['justplay'] is not None:
@@ -365,42 +365,33 @@ class Timer( Source):
                        tags = unescape(param['tags']).split(' ')
 
                epgcache = eEPGCache.getInstance()
-               event = epgcache.lookupEventId(eServiceReference(param['sRef']),int(param['eventid']))
+               event = epgcache.lookupEventId(eServiceReference(param['sRef']), int(param['eventid']))
                if event is None:
-                       return False, "EventId not found"
+                       return [ False, "EventId not found" ]
 
                (begin, end, name, description, eit) = parseEvent(event)
 
                timer = RecordTimerEntry(ServiceReference(param['sRef']), begin , end, name, description, eit, False, justplay, AFTEREVENT.NONE, dirname=location, tags=tags)
                self.recordtimer.record(timer)
-               return True, "Timer '%s' added" %(timer.name)
+               return [ True, "Timer '%s' added" % (timer.name) ]
 
        def writeTimerList(self, force=False):
                # is there an easier and better way? :\
                if config.plugins.Webinterface.autowritetimer.value or force:
                        print "Timer.py writing timer to flash"
                        self.session.nav.RecordTimer.saveTimer()
-                       return True, "TimerList was saved "
+                       return [ True, "TimerList has been saved " ]
                else:
-                       return False, "TimerList was not saved "
+                       return [ False, "TimerList has not been saved " ]
 
 
-       def getText(self):
-               print "[WebComponents.Timer] result: ", self.result
-               (result, text) = self.result
-               xml  = "<e2simplexmlresult>\n"
-               if result:
-                       xml += "<e2state>True</e2state>\n"
-               else:
-                       xml += "<e2state>False</e2state>\n"
-               xml += "<e2statetext>%s</e2statetext>\n" % text
-               xml += "</e2simplexmlresult>\n"
-               return xml
+       def getResult(self):
+               return self.res
 
-       text = property(getText)
+       result = property(getResult)
 
        ## part for listfiller requests
-       def command(self):
+       def getList(self):
                timerlist = []
 
                for item in self.recordtimer.timer_list + self.recordtimer.processed_timers:
@@ -457,7 +448,7 @@ class Timer( Source):
                        timer.append(item.cancelled)
 
                        if item.eit is not None:
-                               event = self.epgcache.lookupEvent(['EX',("%s" % item.service_ref ,2,item.eit)])
+                               event = self.epgcache.lookupEvent(['EX', ("%s" % item.service_ref , 2, item.eit)])
                                if event and event[0][0] is not None:
                                        timer.append(event[0][0])
                                else:
@@ -477,7 +468,7 @@ class Timer( Source):
 
                return timerlist
 
-       list = property(command)
+       list = property(getList)
        lut = {
                                "ServiceReference":0,
                                "ServiceName": 1,
index a2fa859..3171f2e 100644 (file)
@@ -4,18 +4,19 @@ from GlobalActions import globalActionMap
 from Components.VolumeControl import VolumeControl
 
 class Volume(Source):
-       def __init__(self,session, command_default="state"):
+       def __init__(self, session, command_default="state"):
                self.cmd = command_default
                Source.__init__(self)
                global globalActionMap # hackalert :)
                self.actionmap = globalActionMap
                self.volctrl = eDVBVolumecontrol.getInstance() # this is not nice
-               #self.volcontrol = VolumeControl(session)
+               self.vol = [ True, "State", self.volctrl.getVolume(), self.volctrl.isMuted() ]
 
        def handleCommand(self, cmd):
                self.cmd = cmd
+               self.vol = self.handleVolume()
 
-       def do_func(self):
+       def handleVolume(self):
                list = []
                if self.cmd == "state":
                        list.append(True)
@@ -35,9 +36,9 @@ class Volume(Source):
                elif self.cmd.startswith("set"):
                        try:
                                targetvol = int(self.cmd[3:])
-                               if targetvol>100:
+                               if targetvol > 100:
                                        targetvol = 100
-                               if targetvol<0:
+                               if targetvol < 0:
                                        targetvol = 0
 
                                self.volctrl.setVolume(targetvol, targetvol)
@@ -46,19 +47,18 @@ class Volume(Source):
                                list.append("Volume set to %i" % targetvol)
                        except ValueError: # if cmd was set12NotInt
                                list.append(False)
-                               list.append("Wrong parameter format 'set=%s'. Use set=set15 "%self.cmd)
+                               list.append("Wrong parameter format 'set=%s'. Use set=set15 " % self.cmd)
                else:
                        list.append(False)
-                       list.append("Unknown Volume command %s" %self.cmd)
+                       list.append("Unknown Volume command %s" % self.cmd)
+               
                list.append(self.volctrl.getVolume())
                list.append(self.volctrl.isMuted())
 
-               return [list]
-
-       list = property(do_func)
-       lut = {"Result": 0
-                       ,"ResultText": 1
-                       ,"Volume": 2
-                       ,"isMuted": 3
-                       }
+               return list
+       
+       def getVolume(self):
+               return self.vol
+       
+       volume = property(getVolume)
 
index b6f0f27..7b25d48 100644 (file)
@@ -8,7 +8,7 @@ from enigma import eServiceReference
 from re import sub
 from time import strftime, localtime, time
 
-class WAPfunctions( Source):
+class WAPfunctions(Source):
        LISTTIME = 0
        REPEATED = 1
        SERVICELIST = 2
@@ -18,18 +18,18 @@ class WAPfunctions( Source):
        TAGLIST = 6
        DELETEOLD = 7
        
-       lut = {"Name":0
-                       ,"Value":1
-                       ,"Selected":2
+       lut = { "Name":0,
+                       "Value":1,
+                       "Selected":2
        }
        
-       def __init__(self, session,func = LISTTIME):
+       def __init__(self, session, func=LISTTIME):
                self.func = func
                Source.__init__(self)           
                self.session = session
                self.result = ["unknown command (%s)" % self.func]
 
-       def handleCommand(self,cmd):
+       def handleCommand(self, cmd):
                print "WAPfunctions: handleCommand", cmd
                if self.func is self.LISTTIME:
                        self.result = self.fillListTime(cmd)
@@ -50,8 +50,8 @@ class WAPfunctions( Source):
                else:
                        self.result = ["unknown command cmd(%s) self.func(%s)" % (cmd, self.func)]
 
-       def fillListTime(self,param):
-               print "fillListTime",param
+       def fillListTime(self, param):
+               print "fillListTime", param
                
                input = 0
                start = 1
@@ -74,13 +74,13 @@ class WAPfunctions( Source):
                                timePlusTwo = end
                
                t = {}
-               t["sday"]=t["day"]=strftime("%d", localtime(timeNow))
-               t["smonth"]=t["month"]=strftime("%m", localtime(timeNow))
-               t["syear"]=t["year"]=strftime("%Y", localtime(timeNow))
-               t["smin"]=strftime("%M", localtime(timeNow))
-               t["shour"]=strftime("%H", localtime(timeNow))
-               t["emin"]=strftime("%M", localtime(timePlusTwo))
-               t["ehour"]=strftime("%H", localtime(timePlusTwo))
+               t["sday"] = t["day"] = strftime("%d", localtime(timeNow))
+               t["smonth"] = t["month"] = strftime("%m", localtime(timeNow))
+               t["syear"] = t["year"] = strftime("%Y", localtime(timeNow))
+               t["smin"] = strftime("%M", localtime(timeNow))
+               t["shour"] = strftime("%H", localtime(timeNow))
+               t["emin"] = strftime("%M", localtime(timePlusTwo))
+               t["ehour"] = strftime("%H", localtime(timePlusTwo))
                
                key = ""
                for i in param:
@@ -102,7 +102,7 @@ class WAPfunctions( Source):
                        end = 12
                else:
                        start = int(t[key])
-                       end = int(t[key])+2
+                       end = int(t[key]) + 2
                
                if param[key] == "now" or param[key] == "end" or param[key] == "begin":
                        input = int(t[key])
@@ -110,40 +110,40 @@ class WAPfunctions( Source):
                        input = param[key] or 0
                        input = int(input)
                
-               self.result = self.fillOptionListAny(input,start,end)
+               self.result = self.fillOptionListAny(input, start, end)
                return self.result
        
-       def fillOptionListAny(self,input,start,end):
+       def fillOptionListAny(self, input, start, end):
                returnList = []
-               for i in range(start,end+1,1):
+               for i in range(start, end + 1, 1):
                        returnList1 = []
                        j = str(i)
                        if len(j) == 1:
                                j = "0%s" % j
                        returnList1.append(j)
                        returnList1.append(i)
-                       if i==input:
+                       if i == input:
                                returnList1.append("selected")
                        else:
                                returnList1.append("")
                        returnList.append(returnList1)
                return returnList
                
-       def fillRepeated(self,param):
-               print "fillRepeated",param
+       def fillRepeated(self, param):
+               print "fillRepeated", param
                repeated = param or 0
                repeated = int(repeated)
                
                self.lut = {"Name":0
-                       ,"Value":1
-                       ,"Description":2
-                       ,"Selected":3
+                       , "Value":1
+                       , "Description":2
+                       , "Selected":3
                }
                
-               mo = ["mo",     1, "Mo "]#"Monday"]
-               tu = ["tu",     2, "Tu "]#"Tuesday"]
-               we = ["we",     4, "We "]#"Wednesday"]
-               th = ["th",     8, "Th "]#"Thursday"]
+               mo = ["mo",     1, "Mo "]#"Monday"]
+               tu = ["tu",     2, "Tu "]#"Tuesday"]
+               we = ["we",     4, "We "]#"Wednesday"]
+               th = ["th",     8, "Th "]#"Thursday"]
                fr = ["fr", 16, "Fr "]#"Friday"]
                sa = ["sa", 32, "Sa "]#"Saturday"]
                su = ["su", 64, "Su "]#"Sunday"]
@@ -219,11 +219,11 @@ class WAPfunctions( Source):
        
        def serviceListOne(self, bouquet, selref):
                ref = eServiceReference(bouquet)
-               self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
+               self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False)
                self.servicelist.setRoot(ref)
                returnList = []
                for (ref2, name) in self.servicelist.getServicesAsList():
-                       print "ref2: (",ref2, ") name: (",name,")"
+                       print "ref2: (", ref2, ") name: (", name, ")"
                        returnListPart = []
                        returnListPart.append(name)
                        returnListPart.append(ref2)
@@ -235,8 +235,8 @@ class WAPfunctions( Source):
                        returnList.append(returnListPart)
                return returnList
 
-       def serviceList(self,param):
-               print "serviceList: ",param
+       def serviceList(self, param):
+               print "serviceList: ", param
                sRef = str(param["sRef"])
                bouquet = str(param["bouquet"])
                self.sRefFound = 0
@@ -245,20 +245,20 @@ class WAPfunctions( Source):
                        returnList = []
                        bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
                        ref = eServiceReference(bouquet)
-                       self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
+                       self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False)
                        self.servicelist.setRoot(ref)
                        for (ref2, name) in self.servicelist.getServicesAsList():
                                part = self.serviceListOne(ref2, sRef)
                                if part:
-                                       returnList = returnList + [["-- "+name+" --", "<"+name+">", ""]] + part
+                                       returnList = returnList + [["-- " + name + " --", "<" + name + ">", ""]] + part
                        bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
                        ref = eServiceReference(bouquet)
-                       self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
+                       self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False)
                        self.servicelist.setRoot(ref)
                        for (ref2, name) in self.servicelist.getServicesAsList():
                                part = self.serviceListOne(ref2, sRef)
                                if part:
-                                       returnList = returnList + [["-- "+name+" --", "<"+name+">", ""]] + part
+                                       returnList = returnList + [["-- " + name + " --", "<" + name + ">", ""]] + part
                else:
                        returnList = self.serviceListOne(bouquet, sRef)
 
@@ -271,8 +271,8 @@ class WAPfunctions( Source):
        def getServiceList(self, ref):
                self.servicelist.root = ref
 
-       def locationList(self,param):
-               print "locationList",param
+       def locationList(self, param):
+               print "locationList", param
                dirname = param
                lst = config.movielist.videodirs.value
                if not dirname:
@@ -282,8 +282,8 @@ class WAPfunctions( Source):
                returnList = [[lst[i], i, dirname == lst[i] and "selected" or ""] for i in range(len(lst))]
                return returnList
 
-       def tagList(self,param):
-               print "tagList",param
+       def tagList(self, param):
+               print "tagList", param
                tag = param
                try:
                        file = open("/etc/enigma2/movietags")
@@ -294,47 +294,47 @@ class WAPfunctions( Source):
                except IOError, ioe:
                        taglist = []
                if not tag in taglist:
-                       taglist = [tag]+taglist
+                       taglist = [tag] + taglist
                if not "" in taglist:
                        taglist.append("")
                returnList = [[taglist[i], i, tag == taglist[i] and "selected" or ""] for i in range(len(taglist))]
                return returnList
 
-       def fillOptionList(self,param):
-               print "fillOptionList",param
+       def fillOptionList(self, param):
+               print "fillOptionList", param
                returnList = []
                if param.has_key("justplay"):
                        number = param["justplay"] or 0
                        number = int(number)
-                       returnList.append(["Record",0,number==0 and "selected" or ""])
-                       returnList.append(["Zap",1,number==1 and "selected" or ""])
+                       returnList.append(["Record", 0, number == 0 and "selected" or ""])
+                       returnList.append(["Zap", 1, number == 1 and "selected" or ""])
                elif param.has_key("afterevent"):
                        number = param["afterevent"] or 0
                        number = int(number)
-                       returnList.append(["Nothing",0,number==0 and "selected" or ""])
-                       returnList.append(["Standby",1,number==1 and "selected" or ""])
-                       returnList.append(["Deepstandby/Shutdown",2,number==2 and "selected" or ""])
-                       returnList.append(["Auto",3,number==3 and "selected" or ""])
+                       returnList.append(["Nothing", 0, number == 0 and "selected" or ""])
+                       returnList.append(["Standby", 1, number == 1 and "selected" or ""])
+                       returnList.append(["Deepstandby/Shutdown", 2, number == 2 and "selected" or ""])
+                       returnList.append(["Auto", 3, number == 3 and "selected" or ""])
                return returnList
        
-       def deleteOldSaved(self,param):
-               print "deleteOldSaved",param
+       def deleteOldSaved(self, param):
+               print "deleteOldSaved", param
                returnList = []
-               returnList.append(["deleteOldOnSave",param["deleteOldOnSave"],""])
-               returnList.append(["command",param["command"],""])
+               returnList.append(["deleteOldOnSave", param["deleteOldOnSave"], ""])
+               returnList.append(["command", param["command"], ""])
                if int(param["deleteOldOnSave"]) == 1:
-                       returnList.append(["channelOld",param["sRef"],""])
-                       returnList.append(["beginOld",param["begin"],""])
-                       returnList.append(["endOld",param["end"],""])
+                       returnList.append(["channelOld", param["sRef"], ""])
+                       returnList.append(["beginOld", param["begin"], ""])
+                       returnList.append(["endOld", param["end"], ""])
                return returnList
                        
        
-       def fillValue(self,param):
-               print "fillValue: ",param
-               return [["",param,""]]
+       def fillValue(self, param):
+               print "fillValue: ", param
+               return [["", param, ""]]
 
        def getText(self):
-               (result,text) = self.result
+               (result, text) = self.result
                return text
        
        def filterXML(self, item):
index 43f85c9..15aa96a 100644 (file)
@@ -6,7 +6,7 @@ from enigma import eListboxPythonMultiContent, gFont
 from Screens.Screen import Screen
 from Screens.MessageBox import MessageBox
 
-from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigInteger,ConfigYesNo,ConfigText,ConfigSelection
+from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigInteger, ConfigYesNo, ConfigText, ConfigSelection
 from Components.ConfigList import ConfigListScreen
 from Components.Label import Label
 from Components.Button import Button
@@ -16,7 +16,8 @@ from Components.MultiContent import MultiContentEntryText
 from Components.ActionMap import ActionMap
 
 from Components.Network import iNetwork
-def initInterfaceConfig(i = None, new = False):
+
+def initInterfaceConfig(i=None, new=False):
        choices = getConfiguredIPs()
 
        if i is None and new is True:
@@ -24,15 +25,15 @@ def initInterfaceConfig(i = None, new = False):
        elif i is None:
                i = config.plugins.Webinterface.interfacecount.value - 1
 
-       print "[WebIfConfig.initInterfaceConfig] i is %s" %i
+       print "[WebIfConfig.initInterfaceConfig] i is %s" % i
        config.plugins.Webinterface.interfaces.append(ConfigSubsection())
-       config.plugins.Webinterface.interfaces[i].disabled = ConfigYesNo(default = False)
+       config.plugins.Webinterface.interfaces[i].disabled = ConfigYesNo(default=False)
        config.plugins.Webinterface.interfaces[i].address = ConfigSelection(choices, default=choices[0])
        config.plugins.Webinterface.interfaces[i].port = ConfigInteger(80, (0, 65535))
-       config.plugins.Webinterface.interfaces[i].useauth = ConfigYesNo(default = False)
-       config.plugins.Webinterface.interfaces[i].usessl = ConfigYesNo(default = False)
+       config.plugins.Webinterface.interfaces[i].useauth = ConfigYesNo(default=False)
+       config.plugins.Webinterface.interfaces[i].usessl = ConfigYesNo(default=False)
 
-       config.plugins.Webinterface.interfacecount.value = i+1
+       config.plugins.Webinterface.interfacecount.value = i + 1
 
        return i
 
@@ -40,7 +41,7 @@ def updateConfig():
        choices = getConfiguredIPs()
        default = choices[0]
        for c in config.plugins.Webinterface.interfaces:
-               c.address.setChoices(choices, default = default)
+               c.address.setChoices(choices, default=default)
                c.address.load()
 
 def getConfiguredIPs():
@@ -51,7 +52,7 @@ def getConfiguredIPs():
        for adaptername in iNetwork.ifaces:
                extip = iNetwork.ifaces[adaptername]['ip']
                if iNetwork.ifaces[adaptername]['up'] is True:
-                       extip = "%i.%i.%i.%i"%(extip[0],extip[1],extip[2],extip[3])
+                       extip = "%i.%i.%i.%i" % (extip[0], extip[1], extip[2], extip[3])
                        choices.append(extip)
        return choices
 
@@ -61,14 +62,14 @@ def initConfig():
                # setting default interface
                # 0.0.0.0:80 auth=False
                config.plugins.Webinterface.interfaces.append(ConfigSubsection())
-               config.plugins.Webinterface.interfaces[0].disabled = ConfigYesNo(default = False)
+               config.plugins.Webinterface.interfaces[0].disabled = ConfigYesNo(default=False)
 
                #needs to be refreshed before each call, because ifaces can be changed since e2 boot
-               config.plugins.Webinterface.interfaces[0].address = ConfigSelection(getConfiguredIPs(),default='0.0.0.0')
+               config.plugins.Webinterface.interfaces[0].address = ConfigSelection(getConfiguredIPs(), default='0.0.0.0')
 
-               config.plugins.Webinterface.interfaces[0].port = ConfigInteger(80, (0,65535))
-               config.plugins.Webinterface.interfaces[0].useauth = ConfigYesNo(default = False)
-               config.plugins.Webinterface.interfaces[0].usessl = ConfigYesNo(default = False)
+               config.plugins.Webinterface.interfaces[0].port = ConfigInteger(80, (0, 65535))
+               config.plugins.Webinterface.interfaces[0].useauth = ConfigYesNo(default=False)
+               config.plugins.Webinterface.interfaces[0].usessl = ConfigYesNo(default=False)
                config.plugins.Webinterface.interfaces[0].save()
 
                config.plugins.Webinterface.interfacecount.value = 1
@@ -76,11 +77,11 @@ def initConfig():
        else:
                i = 0
                while i < interfacecount:
-                       print "[WebIfConfig.initConfig] i is %s" %i
+                       print "[WebIfConfig.initConfig] i is %s" % i
                        initInterfaceConfig(i)
                        i += 1
 
-class WebIfConfigScreen(ConfigListScreen,Screen):
+class WebIfConfigScreen(ConfigListScreen, Screen):
        skin = """
                <screen position="100,100" size="550,400" title="%s">
                        <widget name="config" position="5,5" size="540,360" scrollbarMode="showOnDemand" zPosition="1"/>
@@ -94,7 +95,7 @@ class WebIfConfigScreen(ConfigListScreen,Screen):
                        <ePixmap name="yellow" pixmap="skin_default/buttons/yellow.png" position="280,360" size="140,40" zPosition="4" transparent="1" alphatest="on"/>
                </screen>""" % _("Webinterface: Main Setup")
 
-       def __init__(self, session, args = 0):
+       def __init__(self, session, args=0):
                Screen.__init__(self, session)
                l = [
                        getConfigListEntry(_("Start Webinterface"), config.plugins.Webinterface.enable),
@@ -126,13 +127,13 @@ class WebIfConfigScreen(ConfigListScreen,Screen):
                print "saving"
                for x in self["config"].list:
                        x[1].save()
-               self.close(True,self.session)
+               self.close(True, self.session)
 
        def cancel(self):
                print "cancel"
                for x in self["config"].list:
                        x[1].cancel()
-               self.close(False,self.session)
+               self.close(False, self.session)
 
 class WebIfInterfaceListConfigScreen(Screen):
        skin = """
@@ -160,7 +161,7 @@ class WebIfInterfaceListConfigScreen(Screen):
                self["key_red"] = Button(_("Add"))
                self["key_yellow"] = Button(_("Change"))
                self["ifacelist"] = WebIfInterfaceList([])
-               self["actions"] = ActionMap(["WizardActions","MenuActions","ShortcutActions"],
+               self["actions"] = ActionMap(["WizardActions", "MenuActions", "ShortcutActions"],
                        {
                         "ok"   :       self.keyGreen,
                         "back" :       self.close,
@@ -181,23 +182,23 @@ class WebIfInterfaceListConfigScreen(Screen):
                        res = [
                                i, #550,400
                                MultiContentEntryText(pos=(5, 0), size=(150, 25), font=0, text=c.address.value),
-                               MultiContentEntryText(pos=(120, 0),size=(50, 25), font=0,text=str(c.port.value))
+                               MultiContentEntryText(pos=(120, 0), size=(50, 25), font=0, text=str(c.port.value))
                        ]
 
                        if c.usessl.value:
-                               res.append(MultiContentEntryText(pos=(170, 0),size=(200, 25), font=0,text=_("yes"),color=0x0000FF00))
+                               res.append(MultiContentEntryText(pos=(170, 0), size=(200, 25), font=0, text=_("yes"), color=0x0000FF00))
                        else:
-                               res.append(MultiContentEntryText(pos=(170, 0),size=(200, 25), font=0,text=_("no"),color=0x00FF0000))
+                               res.append(MultiContentEntryText(pos=(170, 0), size=(200, 25), font=0, text=_("no"), color=0x00FF0000))
 
                        if c.useauth.value:
-                               res.append(MultiContentEntryText(pos=(230, 0),size=(170, 25), font=0,text=_("yes"),color=0x0000FF00))
+                               res.append(MultiContentEntryText(pos=(230, 0), size=(170, 25), font=0, text=_("yes"), color=0x0000FF00))
                        else:
-                               res.append(MultiContentEntryText(pos=(230, 0),size=(170, 25), font=0,text=_("no"),color=0x00FF0000))
+                               res.append(MultiContentEntryText(pos=(230, 0), size=(170, 25), font=0, text=_("no"), color=0x00FF0000))
 
                        if c.disabled.value:
-                               res.append(MultiContentEntryText(pos=(400, 0),size=(160, 25), font=0,text=_("yes"),color=0x0000FF00))
+                               res.append(MultiContentEntryText(pos=(400, 0), size=(160, 25), font=0, text=_("yes"), color=0x0000FF00))
                        else:
-                               res.append(MultiContentEntryText(pos=(400, 0),size=(160, 25), font=0,text=_("no"),color=0x00FF0000))
+                               res.append(MultiContentEntryText(pos=(400, 0), size=(160, 25), font=0, text=_("no"), color=0x00FF0000))
                        ifaceguilist.append(res)
                        i += 1
 
@@ -206,15 +207,15 @@ class WebIfInterfaceListConfigScreen(Screen):
 
        def keyRed(self):
                print "KEYRED"
-               self.session.openWithCallback(self.updateList,WebIfInterfaceConfigScreen,None)
+               self.session.openWithCallback(self.updateList, WebIfInterfaceConfigScreen, None)
 
        def keyGreen(self):
                print "KEYGREEN"
 
        def keyYellow(self):
                x = self["ifacelist"].getCurrent()[0]
-               print "current list index",x
-               self.session.openWithCallback(self.updateList,WebIfInterfaceConfigScreen,int(x))
+               print "current list index", x
+               self.session.openWithCallback(self.updateList, WebIfInterfaceConfigScreen, int(x))
 
        def up(self):
                self["ifacelist"].up()
@@ -229,7 +230,7 @@ class WebIfInterfaceListConfigScreen(Screen):
                self["ifacelist"].pageDown()
 
 class WebIfInterfaceList(MenuList):
-       def __init__(self, list, enableWrapAround = False):
+       def __init__(self, list, enableWrapAround=False):
                MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
                self.l.setFont(0, gFont("Regular", 20))
                #self.l.setFont(1, gFont("Regular", 25))
@@ -273,8 +274,8 @@ class WebIfInterfaceConfigScreen(Screen, ConfigListScreen):
 
                try:
                        current = config.plugins.Webinterface.interfaces[i]
-               except IndexError,e:
-                       print "[WebIf] iface config %i not found, adding it and setting default values"%i
+               except IndexError, e:
+                       print "[WebIf] iface config %i not found, adding it and setting default values" % i
                        initInterfaceConfig()
                        current = config.plugins.Webinterface.interfaces[ifacenum]
 
index cc79228..be25a93 100644 (file)
@@ -12,7 +12,7 @@ from Components.Language import language
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE
 import os,gettext
 
-__version__ = "1.5beta4"
+__version__ = "1.5rc1"
 
 PluginLanguageDomain = "WebInterface"
 PluginLanguagePath = "Extensions/WebInterface/locale"
index b5317ee..a0a6789 100644 (file)
@@ -17,33 +17,33 @@ from OpenSSL import SSL
 
 from __init__ import _, __version__
 
-DEBUG_TO_FILE=False # PLEASE DONT ENABLE LOGGING BY DEFAULT (OR COMMIT TO PLUGIN CVS)
+DEBUG_TO_FILE = False # PLEASE DONT ENABLE LOGGING BY DEFAULT (OR COMMIT TO PLUGIN CVS)
 
-DEBUGFILE= "/tmp/twisted.log"
+DEBUGFILE = "/tmp/twisted.log"
 
 #CONFIG INIT
 
 #init the config
 config.plugins.Webinterface = ConfigSubsection()
-config.plugins.Webinterface.enable = ConfigYesNo(default = True)
-config.plugins.Webinterface.allowzapping = ConfigYesNo(default = True)
-config.plugins.Webinterface.includemedia = ConfigYesNo(default = False)
-config.plugins.Webinterface.autowritetimer = ConfigYesNo(default = False)
-config.plugins.Webinterface.loadmovielength = ConfigYesNo(default = False)
+config.plugins.Webinterface.enable = ConfigYesNo(default=True)
+config.plugins.Webinterface.allowzapping = ConfigYesNo(default=True)
+config.plugins.Webinterface.includemedia = ConfigYesNo(default=False)
+config.plugins.Webinterface.autowritetimer = ConfigYesNo(default=False)
+config.plugins.Webinterface.loadmovielength = ConfigYesNo(default=False)
 config.plugins.Webinterface.version = ConfigText(__version__) # used to make the versioninfo accessible enigma2-wide, not confgurable in GUI.
 config.plugins.Webinterface.interfacecount = ConfigInteger(0)
 config.plugins.Webinterface.interfaces = ConfigSubList()
 initConfig()
-config.plugins.Webinterface.warningsslsend = ConfigYesNo(default = False)
+config.plugins.Webinterface.warningsslsend = ConfigYesNo(default=False)
 
-global running_defered,waiting_shutdown
+global running_defered, waiting_shutdown
 running_defered = []
 waiting_shutdown = 0
-server.VERSION = "Enigma2 WebInterface Server $Revision$".replace("$Revi","").replace("sion: ","").replace("$","")
+server.VERSION = "Enigma2 WebInterface Server $Revision$".replace("$Revi", "").replace("sion: ", "").replace("$", "")
 
 class Closer:
        counter = 0
-       def __init__(self,session, callback = None):
+       def __init__(self, session, callback=None):
                self.callback = callback
                self.session = session
 
@@ -54,17 +54,17 @@ class Closer:
                        x = d.stopListening()
                        try:
                                x.addCallback(self.isDown)
-                               self.counter +=1
+                               self.counter += 1
                        except AttributeError:
                                pass
                running_defered = []
-               if self.counter <1:
+               if self.counter < 1:
                        if self.callback is not None:
                                self.callback(self.session)
 
-       def isDown(self,s):
-               self.counter-=1
-               if self.counter <1:
+       def isDown(self, s):
+               self.counter -= 1
+               if self.counter < 1:
                        if self.callback is not None:
                                self.callback(self.session)
 
@@ -78,8 +78,8 @@ def restartWebserver(session):
                pass
 
        global running_defered
-       if len(running_defered) >0:
-               Closer(session,startWebserver).stop()
+       if len(running_defered) > 0:
+               Closer(session, startWebserver).stop()
        else:
                startWebserver(session)
 
@@ -93,13 +93,13 @@ def startWebserver(session):
                return False
        if DEBUG_TO_FILE:
                print "start twisted logfile, writing to %s" % DEBUGFILE
-               startLogging(open(DEBUGFILE,'w'))
+               startLogging(open(DEBUGFILE, 'w'))
 
        for c in config.plugins.Webinterface.interfaces:
                if c.disabled.value is False:
-                       startServerInstance(session,c.address.value,c.port.value,c.useauth.value,c.usessl.value)
+                       startServerInstance(session, c.address.value, c.port.value, c.useauth.value, c.usessl.value)
                else:
-                       print "[Webinterface] not starting disabled interface on %s:%i"%(c.address.value,c.port.value)
+                       print "[Webinterface] not starting disabled interface on %s:%i" % (c.address.value, c.port.value)
 
 def stopWebserver(session):
        try:
@@ -114,30 +114,30 @@ def stopWebserver(session):
        if len(running_defered) > 0:
                Closer(session).stop()
 
-def startServerInstance(session,ipaddress,port,useauth=False,usessl=False):
+def startServerInstance(session, ipaddress, port, useauth=False, usessl=False):
        try:
                toplevel = Toplevel(session)
                if useauth:
                        portal = Portal(HTTPAuthRealm())
                        portal.registerChecker(PasswordDatabase())
-                       root = wrapper.HTTPAuthResource(toplevel,(basic.BasicCredentialFactory(socket_gethostname()),),portal, (IHTTPUser,))
+                       root = wrapper.HTTPAuthResource(toplevel, (basic.BasicCredentialFactory(socket_gethostname()),), portal, (IHTTPUser,))
                        site = server.Site(root)
                else:
                        site = server.Site(toplevel)
                try:
                        if usessl:
-                               ctx = ssl.DefaultOpenSSLContextFactory('/etc/enigma2/server.pem','/etc/enigma2/cacert.pem',sslmethod=SSL.SSLv23_METHOD)
-                               d = reactor.listenSSL(port, channel.HTTPFactory(site),ctx,interface=ipaddress)
+                               ctx = ssl.DefaultOpenSSLContextFactory('/etc/enigma2/server.pem', '/etc/enigma2/cacert.pem', sslmethod=SSL.SSLv23_METHOD)
+                               d = reactor.listenSSL(port, channel.HTTPFactory(site), ctx, interface=ipaddress)
                        else:
-                               d = reactor.listenTCP(port, channel.HTTPFactory(site),interface=ipaddress)
+                               d = reactor.listenTCP(port, channel.HTTPFactory(site), interface=ipaddress)
                        running_defered.append(d)
-                       print "[Webinterface] started on %s:%i"%(ipaddress,port),"auth=",useauth,"ssl=",usessl
+                       print "[Webinterface] started on %s:%i" % (ipaddress, port), "auth=", useauth, "ssl=", usessl
                except CannotListenError, e:
-                       print "[Webinterface] Could not Listen on %s:%i!"%(ipaddress,port)
-                       session.open(MessageBox,'Could not Listen on %s:%i!\n\n%s'%(ipaddress,port,str(e)), MessageBox.TYPE_ERROR)
-       except Exception,e:
-               print "[Webinterface] starting FAILED on %s:%i!"%(ipaddress,port),e
-               session.open(MessageBox,'starting FAILED on %s:%i!\n\n%s'%(ipaddress,port,str(e)), MessageBox.TYPE_ERROR)
+                       print "[Webinterface] Could not Listen on %s:%i!" % (ipaddress, port)
+                       session.open(MessageBox, 'Could not Listen on %s:%i!\n\n%s' % (ipaddress, port, str(e)), MessageBox.TYPE_ERROR)
+       except Exception, e:
+               print "[Webinterface] starting FAILED on %s:%i!" % (ipaddress, port), e
+               session.open(MessageBox, 'starting FAILED on %s:%i!\n\n%s' % (ipaddress, port, str(e)), MessageBox.TYPE_ERROR)
 
 class PasswordDatabase:
        """
@@ -145,7 +145,7 @@ class PasswordDatabase:
        """
        passwordfile = "/etc/passwd"
        implements(checkers.ICredentialsChecker)
-       credentialInterfaces = (credentials.IUsernamePassword,credentials.IUsernameHashedPassword)
+       credentialInterfaces = (credentials.IUsernamePassword, credentials.IUsernameHashedPassword)
 
        def _cbPasswordMatch(self, matched, username):
                if matched:
@@ -154,8 +154,8 @@ class PasswordDatabase:
                        return failure.Failure(error.UnauthorizedLogin())
 
        def requestAvatarId(self, credentials):
-               if check_passwd(credentials.username,credentials.password,self.passwordfile) is True:
-                       return defer.maybeDeferred(credentials.checkPassword,credentials.password).addCallback(self._cbPasswordMatch, str(credentials.username))
+               if check_passwd(credentials.username, credentials.password, self.passwordfile) is True:
+                       return defer.maybeDeferred(credentials.checkPassword, credentials.password).addCallback(self._cbPasswordMatch, str(credentials.username))
                else:
                        return defer.fail(error.UnauthorizedLogin())
 
@@ -165,7 +165,7 @@ class IHTTPUser(Interface):
 class HTTPUser(object):
        implements(IHTTPUser)
        username = None
-       def __init__(self,username):
+       def __init__(self, username):
                self.username = username
 
 class HTTPAuthRealm(object):
@@ -212,7 +212,7 @@ def check_passwd(name, passwd, pwfile=None):
        """Validate given user, passwd pair against password database."""
 
        if not pwfile or type(pwfile) == type(''):
-               getuser = lambda x,pwfile=pwfile: getpwnam(x,pwfile)[1]
+               getuser = lambda x, pwfile = pwfile: getpwnam(x, pwfile)[1]
        else:
                getuser = pwfile.get_passwd
 
@@ -230,7 +230,7 @@ def check_passwd(name, passwd, pwfile=None):
 
 def _to64(v, n):
        r = ''
-       while (n-1 >= 0):
+       while (n - 1 >= 0):
                r = r + DES_SALT[v & 0x3F]
                v = v >> 6
                n = n - 1
@@ -307,7 +307,7 @@ def passcrypt_md5(passwd, salt=None, magic='$1$'):
        return rv
 
 #### stuff for SSL Support
-def makeSSLContext(myKey,trustedCA):
+def makeSSLContext(myKey, trustedCA):
         '''Returns an ssl Context Object
        @param myKey a pem formated key and certifcate with for my current host
                        the other end of this connection must have the cert from the CA
@@ -321,11 +321,11 @@ def makeSSLContext(myKey,trustedCA):
         # or listenSSL
 
         # Why these functioins... Not sure...
-        fd = open(myKey,'r')
+        fd = open(myKey, 'r')
         ss = fd.read()
         theCert = ssl.PrivateCertificate.loadPEM(ss)
         fd.close()
-        fd = open(trustedCA,'r')
+        fd = open(trustedCA, 'r')
         theCA = ssl.Certificate.loadPEM(fd.read())
         fd.close()
         #ctx = theCert.options(theCA)
@@ -376,7 +376,7 @@ def autostart(reason, **kwargs):
                try:
                        updateConfig()
                        startWebserver(global_session)
-               except ImportError,e:
+               except ImportError, e:
                        print "[Webinterface] twisted not available, not starting web services", e
        elif reason is False:
                stopWebserver(global_session)
@@ -392,7 +392,7 @@ def configCB(result, session):
                print "[WebIf] config not changed"
 
 def Plugins(**kwargs):
-       return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART], fnc = sessionstart),
-                       PluginDescriptor(where = [PluginDescriptor.WHERE_NETWORKCONFIG_READ], fnc = autostart),
+       return [PluginDescriptor(where=[PluginDescriptor.WHERE_SESSIONSTART], fnc=sessionstart),
+                       PluginDescriptor(where=[PluginDescriptor.WHERE_NETWORKCONFIG_READ], fnc=autostart),
                        PluginDescriptor(name=_("Webinterface"), description=_("Configuration for the Webinterface"),
-                                                       where = [PluginDescriptor.WHERE_PLUGINMENU], icon="plugin.png",fnc = openconfig)]
+                                                       where=[PluginDescriptor.WHERE_PLUGINMENU], icon="plugin.png", fnc=openconfig)]
index 6f6a0d8..8c3b73e 100644 (file)
@@ -1,5 +1,5 @@
 installdir = /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web-data/
 
-install_DATA = *.js *.html
+install_DATA = *.js *.html *.json
 
 SUBDIRS = lib gfx img tpl
index b84461c..06af140 100644 (file)
@@ -1,7 +1,7 @@
 // $Header$
 
 var DBG = true;
-DBG = false;
+//DBG = false;
 
 var url_tpl = '/web-data/tpl/default/';
 
@@ -61,6 +61,7 @@ var url_messageanswer = "/web/messageanswer?getanswer=now";
 var url_powerstate = "/web/powerstate"; // plus new powerstate
 var url_remotecontrol = "/web/remotecontrol"; // plus command
 var url_signal = "/web/signal";
+var url_deviceinfo = "/web/deviceinfo";
 
 var bouquetsTv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)FROM BOUQUET "bouquets.tv" ORDER BY bouquet';
 var bouquetsRadio = '1:7:2:0:0:0:0:0:0:0:(type == 2)FROM BOUQUET "bouquets.radio" ORDER BY bouquet';
index f56a53f..5563f55 100644 (file)
@@ -1,52 +1,96 @@
-var MANIFEST_FILENAME = "/webdata/manifest.json";
-
+var MANIFEST_FILENAME = "/web-data/manifest.json";
+var STORE_NAME = "enigma2_web";
+       
 var localServer;
 var store;
 
-var STORE_NAME = "enigma2_web"
+function gearsEnabled(){
+       var useGears = userprefs.data.useGears || false;
+       return useGears;
+}      
 
 //     Called onload to initialize local server and store variables
-function initgears() {
-       if (!window.google || !google.gears) {
-               debug("NOTE:  You must install Gears first.");
-       } else {
-               localServer = google.gears.factory.create("beta.localserver");
-               store = localServer.createManagedStore(STORE_NAME);
-               debug("Gears initialized.");
+function initGears() { 
+       if(gearsEnabled()){
+               if (!window.google || !google.gears) {
+                       notify("[GEARS] NOTE: You must install Gears first.", false);
+               } else {
+                       localServer = google.gears.factory.create("beta.localserver");
+                       store = localServer.createManagedStore(STORE_NAME);
+                       createStore();
+               }
        }
 }
 
 //Create the managed resource store
 function createStore() {
-       if (!window.google || !google.gears) {
-//             alert("You must install Gears first.");
-               return;
-       }
-
-       store.manifestUrl = MANIFEST_FILENAME;
-       store.checkForUpdate();
-
-       var timerId = window.setInterval(function() {
-               // When the currentVersion property has a value, all of the resources
-               // listed in the manifest file for that version are captured. There is
-               // an open bug to surface this state change as an event.
-               if (store.currentVersion) {
-                       window.clearInterval(timerId);
-                       debug("Finished caputring version: " + 
-                                       store.currentVersion);
-               } else if (store.updateStatus == 3) {
-                       debug("Error: " + store.lastErrorMessage);
+       if (gearsEnabled()) {           
+               if (!window.google || !google.gears) {
+                       notify("[GEARS] NOTE: You must install Gears first.", false);
+                       return;
                }
-       }, 500);  
+
+               store.manifestUrl = MANIFEST_FILENAME;
+               store.checkForUpdate();
+               store.onprogress = function(e){
+                                                               set('gearsProcess', 'Files loaded: ' + e.filesComplete + ' / ' + e.filesTotal);                         
+                                                       };
+
+               var timerId = window.setInterval( function() {
+                       // When the currentVersion property has a value, all of the resources
+                       // listed in the manifest file for that version are captured.
+                       // There is an open bug to surface this state change as an event.
+                               if (store.currentVersion) {
+                                       window.clearInterval(timerId);
+                                       if (typeof (debug) == "function") {
+                                               notify("[GEARS] Finished capturing version: "
+                                                               + store.currentVersion);
+                                       }
+                               } else if (store.updateStatus == 3) {
+                                       if (typeof (debug) == "function") {
+                                               notify("[GEARS] Error: " + store.lastErrorMessage, false);
+                                       }
+                               }
+                       }, 500);
+
+       } 
 }
 
 //Remove the managed resource store.
 function removeStore() {
        if (!window.google || !google.gears) {
-               debug("You must install Gears first.");
+               if(typeof(debug) == "function"){
+                       notify("[GEARS] NOTE: You must install Gears first.", false);
+               }
                return;
        }
 
        localServer.removeManagedStore(STORE_NAME);
-       debug("Done. The local store has been removed.");
+       if(typeof(debug) == "function"){
+               notify("[GEARS] Done. The local GEARS-Store for enigma2 WebControl has been removed.");
+       }
+}
+
+function enableGears(callback) {
+       if(!gearsEnabled()){
+               userprefs.data.useGears = true;
+               userprefs.save();
+               initGears();            
+       }
+       if(typeof(callback) == 'function'){
+               callback();
+       }
 }
+
+function disableGears(callback) {
+       if(gearsEnabled()){
+               userprefs.data.useGears = false;
+               userprefs.save();
+               removeStore();
+       }
+       if(typeof(callback) == 'function'){
+               callback();
+       }
+}
+
+initGears();
\ No newline at end of file
index 3a93318..98f0248 100644 (file)
@@ -1,51 +1,59 @@
 {
   "betaManifestVersion": 1,
-  "version": "v1",
+  "version": "v21",
   "entries": [
+               { "url": "IEFixes.htc" },               
                { "url": "img/arrow_down.png" },
                { "url": "img/arrow_up.png" },
                { "url": "img/delete.png" },
                { "url": "img/dreamboxweb.png" },
                { "url": "img/edit.png" },
+               { "url": "img/epg.png" },
+               { "url": "img/favicon.ico" },
+               { "url": "img/feed.png" },
                { "url": "img/led_off.png" },
                { "url": "img/led_on.png" },
                { "url": "img/nok.png" },
                { "url": "img/off.png" },
                { "url": "img/on.png" },
+               { "url": "img/rc.png" },
+               { "url": "img/rcold.png" },
+               { "url": "img/record.png" },
+               { "url": "img/save.png" },
+               { "url": "img/screen.png" },
+               { "url": "img/search.png" },
                { "url": "img/signal.png" },
                { "url": "img/speak_off.png" },
                { "url": "img/speak_on.png" },
                { "url": "img/stream.png" },
-               { "url": "lib/gears_init.js" },
-               { "url": "lib/prototype-1.6.0.3.js" },
-               { "url": "lib/shadedborder.js" },
-               { "url": "lib/trimpath-template-1.0.38.js" },    
-               { "url": "tpl/tplAbout.htm" },
-               { "url": "tpl/tplBouquetList.htm" },
-               { "url": "tpl/tplDebug.htm" },
-               { "url": "tpl/tplEpgList.htm" },
-               { "url": "tpl/tplGrab.htm" },
-               { "url": "tpl/tplMediaPlayer.htm" },
-               { "url": "tpl/tplMovieList.htm" },
-               { "url": "tpl/tplNavBoxControl.htm" },
-               { "url": "tpl/tplNavMovies.htm" },
-               { "url": "tpl/tplNavRadio.htm" },
-               { "url": "tpl/tplNavTimer.htm" },
-               { "url": "tpl/tplNavTv.htm" },
-               { "url": "tpl/tplPower.htm" },
-               { "url": "tpl/tplSendMessage.htm" },
-               { "url": "tpl/tplServiceList.htm" },
-               { "url": "tpl/tplServiceListEPGItem.htm" },
-               { "url": "tpl/tplSignalPanel.htm" },
-               { "url": "tpl/tplSubServices.htm" },
-               { "url": "tpl/tplTimerEdit.htm" },
-               { "url": "tpl/tplTimerList.htm" },
-               { "url": "tpl/tplWebRemote.htm" },      
-               { "url": "config.js" },
-               { "url": "gears_handler.js" },
-               { "url": "objects.js" },
-               { "url": "timer.js" },
-               { "url": "tools.js" },
-               { "url": "style.css" }
+               { "url": "img/timer.png" },
+               { "url": "img/world.png" },
+               { "url": "img/zap.png" },
+               { "url": "gfx/ajaxload.gif" },          
+               { "url": "tpl/default/index.html" },
+               { "url": "tpl/default/style.css" } ,
+               { "url": "tpl/default/tplAbout.htm" },
+               { "url": "tpl/default/tplBouquetList.htm" },
+               { "url": "tpl/default/tplCurrent.htm" },
+               { "url": "tpl/default/tplDebug.htm" },
+               { "url": "tpl/default/tplEpgList.htm" },
+               { "url": "tpl/default/tplGrab.htm" },
+               { "url": "tpl/default/tplMediaPlayer.htm" },
+               { "url": "tpl/default/tplMovieList.htm" },
+               { "url": "tpl/default/tplNavBoxControl.htm" },
+               { "url": "tpl/default/tplNavMovies.htm" },
+               { "url": "tpl/default/tplNavRadio.htm" },
+               { "url": "tpl/default/tplNavTimer.htm" },
+               { "url": "tpl/default/tplNavTv.htm" },
+               { "url": "tpl/default/tplPower.htm" },
+               { "url": "tpl/default/tplSendMessage.htm" },
+               { "url": "tpl/default/tplServiceList.htm" },
+               { "url": "tpl/default/tplServiceListEPGItem.htm" },
+               { "url": "tpl/default/tplSignalPanel.htm" },
+               { "url": "tpl/default/tplSubServices.htm" },
+               { "url": "tpl/default/tplTimerEdit.htm" },
+               { "url": "tpl/default/tplTimerList.htm" },
+               { "url": "tpl/default/tplWebRemote.htm" },
+               { "url": "tpl/default/tplWebRemoteOld.htm" }
        ]
 }
\ No newline at end of file
index 8af66f2..b57eec1 100644 (file)
@@ -1,63 +1,41 @@
 // $Header$
 // store all objects here
 
-//START class EPGList
-function EPGList(xml){
-       // parsing values from xml-element
-       //debug('init EPGList'+xml);
-       try{
-               this.xmlitems = xml.getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");
-       } catch (e) { debug("[EPGList] parsing Error");}
-       
-       this.getArray = function(sortbytime){
-               debug("[EPGList] Sort by time "+sortbytime);
-               if (sortbytime === true){
-                       var sort1 = [];
-                       for(var i=0;i<this.xmlitems.length;i++){
-                               var xv = new EPGEvent(this.xmlitems.item(i));
-                               sort1.push( [xv.startTime, xv] );
-                       }
-                       sort1.sort(this.sortFunction);
-                       var sort2 = [];
-                       for(i=0;i<sort1.length;i++){
-                               sort2.push(sort1[i][1]);
-                       }
-                       return sort2;
-               }else{
-                       var listxy = [];
-                       for (i=0;i<this.xmlitems.length;i++){
-                               xv = new EPGEvent(this.xmlitems.item(i));
-                               listxy.push(xv);                        
-                       }
-                       return listxy;
+//START class EPGList 
+
+function getNodeContent(xml, nodename, defaultString){ 
+       var     node = xml.getElementsByTagName(nodename);
+       try{
+               return node.item(0).firstChild.data;
+       } catch(e){
+//             debug('[getNodeContent] Error getting content of node "'+ nodename +'" :: ' + e);
+               if(defaultString !== null) {
+                       return defaultString;
                }
-       };
-       this.sortFunction = function(a,b){
-         return a[0] - b[0];
-       };
+               return 'N/A';
+       }
+}
+
+function getNamedChildren(xml, parentname, childname){
+       try {
+               var ret = xml.getElementsByTagName(parentname).item(0).getElementsByTagName(childname);
+               return ret;
+       } catch (e) {
+               return {};
+       }
 }
-//END class EPGList
 
 //START class EPGEvent
 function EPGEvent(xml){        
-       // parsing values from xml-element
-       try{
-               this.eventID = xml.getElementsByTagName('e2eventid').item(0).firstChild.data;
-               this.startTime = xml.getElementsByTagName('e2eventstart').item(0).firstChild.data;
-               this.duration = xml.getElementsByTagName('e2eventduration').item(0).firstChild.data;
-               this.title = xml.getElementsByTagName('e2eventtitle').item(0).firstChild.data;
-               this.serviceRef = xml.getElementsByTagName('e2eventservicereference').item(0).firstChild.data;
-               this.serviceName = xml.getElementsByTagName('e2eventservicename').item(0).firstChild.data;
-               this.fileName = xml.getElementsByTagName('e2filename').item(0).firstChild.data;
-       } catch (e) {
-       }       
-       try{
-               this.description = xml.getElementsByTagName('e2eventdescription').item(0).firstChild.data;
-       } catch (e) {   this.description= 'N/A';        }
-       
-       try{
-               this.descriptionE = xml.getElementsByTagName('e2eventdescriptionextended').item(0).firstChild.data;
-       } catch (e) {   this.descriptionE = 'N/A';      }
+       this.eventID = getNodeContent(xml, 'e2eventid', '');
+       this.startTime = getNodeContent(xml, 'e2eventstart', '');
+       this.duration = getNodeContent(xml, 'e2eventduration', '');
+       this.title = getNodeContent(xml, 'e2eventtitle', '');
+       this.serviceRef = getNodeContent(xml, 'e2eventservicereference', '');
+       this.serviceName = getNodeContent(xml, 'e2eventservicename', '');
+       this.fileName = getNodeContent(xml, 'e2filename', '');  
+       this.description = getNodeContent(xml, 'e2eventdescription');
+       this.descriptionE = getNodeContent(xml, 'e2eventdescriptionextended');
 
        this.getFilename = function (){
                return this.fileName;
@@ -78,8 +56,8 @@ function EPGEvent(xml){
                return h+":"+m;
        };
        this.getTimeDay = function (){
-               var Wochentag = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
-               var wday = Wochentag[this.getTimeStart().getDay()];
+               var weekday = ["So", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
+               var wday = weekday[this.getTimeStart().getDay()];
                var day = this.getTimeStart().getDate();
                var month = this.getTimeStart().getMonth()+1;
                var year = this.getTimeStart().getFullYear();
@@ -103,7 +81,8 @@ function EPGEvent(xml){
                return h+":"+m;
        };
        this.getDuration = function (){
-               return  new Date(parseInt(this.duration, 10)*1000);
+               var date = new Date(parseInt(this.duration, 10)*1000);
+               return date;
        };
        this.getTitle = function (){
                return this.title;
@@ -123,16 +102,52 @@ function EPGEvent(xml){
 }
 //END class EPGEvent
 
-//START class Service
-function ServiceReference(xml){        
+
+function EPGList(xml){
        // parsing values from xml-element
-       //debug('init ServiceReference'+xml);
        try{
-               this.servicereference = xml.getElementsByTagName('e2servicereference').item(0).firstChild.data;
-               this.servicename = xml.getElementsByTagName('e2servicename').item(0).firstChild.data;
-       } catch (e) {
-               //debug("Service parsing Error "+e);
-       }
+               this.xmlitems = xml.getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");
+       } catch (e) { debug("[EPGList] parsing Error");}
+       
+       this.getArray = function(sortbytime){
+               debug("[EPGList] Sort by time "+sortbytime);
+               var list = [];
+               
+               if (sortbytime === true){
+                       var sortList = [];
+                       for(var i=0;i<this.xmlitems.length;i++){
+                               var event = new EPGEvent(this.xmlitems.item(i));
+                               sortList.push( [event.startTime, event] );
+                       }
+                       sortList.sort(this.sortFunction);
+                       
+                       list = [];
+                       for(i=0;i<sortList.length;i++){
+                               list.push(sortList[i][1]);
+                       }
+                       
+                       return list;
+                       
+               }else{
+                       list = [];
+                       for (i=0;i<this.xmlitems.length;i++){
+                               xv = new EPGEvent(this.xmlitems.item(i));
+                               list.push(xv);                  
+                       }
+                       return list;
+               }
+       };
+       
+       this.sortFunction = function(a, b){
+         return a[0] - b[0];
+       };
+}
+//END class EPGList
+
+// START class Service
+function Service(xml){ 
+       this.servicereference = getNodeContent(xml, 'e2servicereference', '');
+       this.servicename = getNodeContent(xml, 'e2servicename');
        
        this.getServiceReference = function(){
                return encodeURIComponent(this.servicereference);
@@ -146,117 +161,46 @@ function ServiceReference(xml){
                return this.servicename.replace('&quot;', '"');
        };
        
-       this.setServiceReference = function(toInsert){
-               this.servicereference = toInsert;
+       this.setServiceReference = function(sref){
+               this.servicereference = sref;
        };
                
-       this.setServiceName = function(toInsert){
-               this.servicename = toInsert.replace('&quot;', '"');
+       this.setServiceName = function(sname){
+               this.servicename = sname.replace('&quot;', '"');
        };
 }      
 //END class Service
 
-//START class ServiceList
+// START class ServiceList
 function ServiceList(xml){
-       // parsing values from xml-element
-       //debug('init ServiceList'+xml);
-       try{
-               this.xmlitems = xml.getElementsByTagName("e2servicelist").item(0).getElementsByTagName("e2service");
-       } catch (e) {
-               //debug("Service parsing Error");
-       }
+       this.xmlitems = getNamedChildren(xml, "e2servicelist", "e2service");
+       this.servicelist = [];
        this.getArray = function(){
-               var listxy = [];
-               try{
+               if(this.servicelist.length === 0){
                        for (var i=0;i<this.xmlitems.length;i++){
-                               var xv = new ServiceReference(this.xmlitems.item(i));
-                               listxy.push(xv);
-                       }                       
-               }catch (e){}
+                               var service = new Service(this.xmlitems.item(i));
+                               this.servicelist.push(service);
+                       }
+               }
                
-               return listxy;
+               return this.servicelist;
        };
 }
 //END class ServiceList
 
-//START class MovieList
-function MovieList(xml){
-       // parsing values from xml-element
-       debug('[MovieList] init: ' + xml);
-       try{
-               this.xmlitems = xml.getElementsByTagName("e2movielist").item(0).getElementsByTagName("e2movie");
-       } catch (e) {
-               debug("[MovieList] parsing Error");
-       }
-       this.getArray = function(){
-               var listxy = [];
-               for(var i=0;i<this.xmlitems.length;i++){
-                       //debug("parsing movie "+i+" of "+this.xmlitems.length);
-                       var xv = new Movie(this.xmlitems.item(i));
-                       listxy.push(xv);                        
-               }
-               return listxy;
-       };
-}
-//END class MovieList
 
-//START class Movie
+// START class Movie
 function Movie(xml){   
-       // parsing values from xml-element
-       //debug('init Movie');
-       try{
-               this.servicereference = xml.getElementsByTagName('e2servicereference').item(0).firstChild.data;
-       } catch (e) {
-               this.servicereference = "N/A";
-       }
-       try{
-               this.servicename = xml.getElementsByTagName('e2servicename').item(0).firstChild.data;
-       } catch (e) {
-               this.servicename = "N/A";
-       }
-       try{
-               this.title = xml.getElementsByTagName('e2title').item(0).firstChild.data;
-       } catch (e) {
-               this.title = "N/A";
-       }
-       try{
-               this.descriptionextended = xml.getElementsByTagName('e2descriptionextended').item(0).firstChild.data;
-       } catch (e) {
-               this.descriptionextended = "N/A";
-       }
-       try{
-               this.description = xml.getElementsByTagName('e2description').item(0).firstChild.data;
-       } catch (e) {
-               this.description = "N/A";
-       }
-       try{
-               this.tags = xml.getElementsByTagName('e2tags').item(0).firstChild.data;
-       } catch (e) {
-               this.tags = "&nbsp;"; // no whitespaces... tags will be splittet later
-       }
-       try{
-               this.filename = xml.getElementsByTagName('e2filename').item(0).firstChild.data;
-       } catch (e) {
-               this.filename = "n/a";
-       }
-       try{
-               this.filesize = xml.getElementsByTagName('e2filesize').item(0).firstChild.data;
-       } catch (e) {
-               this.filesize = 0;
-       }
-       try{
-               this.startTime = xml.getElementsByTagName('e2time').item(0).firstChild.data;
-       } catch (e) {
-               this.startTime = "0";
-       }
-       try{
-               this.length = xml.getElementsByTagName('e2length').item(0).firstChild.data;
-       } catch (e) {
-               this.length = "0";
-       }
-       
-               
-       
+       this.servicereference = getNodeContent(xml, 'e2servicereference');
+       this.servicename = getNodeContent(xml, 'e2servicename');
+       this.title = getNodeContent(xml, 'e2title');
+       this.descriptionextended = getNodeContent(xml, 'e2descriptionextended');
+       this.description = getNodeContent(xml, 'e2description');
+       this.tags = getNodeContent(xml, 'e2tags', '&nbsp;');
+       this.filename = getNodeContent(xml, 'e2filename');
+       this.filesize = getNodeContent(xml, 'e2filesize', 0);
+       this.startTime = getNodeContent(xml, 'e2time', 0);
+       this.length = getNodeContent(xml, 'e2length', 0);
 
        this.getLength = function (){
                return this.length;
@@ -319,165 +263,57 @@ function Movie(xml){
 }      
 //END class Movie
 
-//START class TimerList
-function TimerList(xml){
-       // parsing values from xml-element
-       try{
-               this.xmlitems = xml.getElementsByTagName("e2timerlist").item(0).getElementsByTagName("e2timer");
-       } catch (e) {
-               debug("[TimerList] parsing Error");
-       }
+
+// START class MovieList
+function MovieList(xml){
+       this.xmlitems = getNamedChildren(xml, "e2movielist", "e2movie");
+       this.movielist = [];
+       
        this.getArray = function(){
-               var listxy = [];
-               for(var i=0;i<this.xmlitems.length;i++){
-                       //debug("parsing timer "+i+" of "+this.xmlitems.length);
-                       var xv = new Timer(this.xmlitems.item(i));
-                       listxy.push(xv);                        
+               if(this.movielist.length === 0){                        
+                       for(var i=0;i<this.xmlitems.length;i++){
+                               //debug("parsing movie "+i+" of "+this.xmlitems.length);
+                               var movie = new Movie(this.xmlitems.item(i));
+                               this.movielist.push(movie);                     
+                       }
                }
-               return listxy;
+               
+               return this.movielist;
        };
 }
-//END class TimerList
+//END class MovieList
+
 
-//START class Timer
+
+// START class Timer
 function Timer(xml){   
-       // parsing values from xml-element
-       //debug('init Timer');
-       try{
-               this.servicereference = xml.getElementsByTagName('e2servicereference').item(0).firstChild.data;
-       } catch (e) {
-               this.servicereference = "N/A";
-       }
-       try{
-               this.servicename = xml.getElementsByTagName('e2servicename').item(0).firstChild.data;
-       } catch (e) {
-               this.servicename = "N/A";
-       }
-       try{
-               this.eventid = xml.getElementsByTagName('e2eit').item(0).firstChild.data;
-       } catch (e) {
-               this.eventid = "N/A";
-       }
-       try{
-               this.name = xml.getElementsByTagName('e2name').item(0).firstChild.data;
-       } catch (e) {
-               this.name = "N/A";
-       }
-       try{
-               this.description = xml.getElementsByTagName('e2description').item(0).firstChild.data;
-       } catch (e) {
-               this.description = "N/A";
-       }
-       try{
-               this.descriptionextended = xml.getElementsByTagName('e2descriptionextended').item(0).firstChild.data;
-       } catch (e) {
-               this.descriptionextended = "N/A";
-       }
-       try{
-               this.disabled = xml.getElementsByTagName('e2disabled').item(0).firstChild.data;
-       } catch (e) {
-               this.disabled = "0";
-       }
-       try{
-               this.timebegin = xml.getElementsByTagName('e2timebegin').item(0).firstChild.data;
-       } catch (e) {
-               this.timebegin = "N/A";
-       }
-       try{
-               this.timeend = xml.getElementsByTagName('e2timeend').item(0).firstChild.data;
-       } catch (e) {
-               this.timeend = "N/A";
-       }
-       try{
-               this.duration = xml.getElementsByTagName('e2duration').item(0).firstChild.data;
-       } catch (e) {           
-               this.duration = "0";
-       }
-       try{
-               this.startprepare = xml.getElementsByTagName('e2startprepare').item(0).firstChild.data;
-       } catch (e) {
-               this.startprepare = "N/A";
-       }
-       try{
-               this.justplay = xml.getElementsByTagName('e2justplay').item(0).firstChild.data;
-       } catch (e) {
-               this.justplay = "";
-       }
-       try{
-               this.afterevent = xml.getElementsByTagName('e2afterevent').item(0).firstChild.data;
-       } catch (e) {
-               this.afterevent = "0";
-       }
-       try{
-               this.dirname = xml.getElementsByTagName('e2dirname').item(0).firstChild.data;
-       } catch (e) {
-               this.dirname = "/hdd/movie/";
-       }
-       try{
-               this.tags = xml.getElementsByTagName('e2tags').item(0).firstChild.data;
-       } catch (e) {
-               this.tags = "";
-       }
-       try{
-               this.logentries = xml.getElementsByTagName('e2logentries').item(0).firstChild.data;
-       } catch (e) {
-               this.logentries = "N/A";
-       }
-       try{
-               this.tfilename = xml.getElementsByTagName('e2filename').item(0).firstChild.data;
-       } catch (e) {
-               this.tfilename = "N/A";
-       }
-       try{
-               this.backoff = xml.getElementsByTagName('e2backoff').item(0).firstChild.data;
-       } catch (e) {
-               this.backoff = "N/A";
-       }
-       try{
-               this.nextactivation = xml.getElementsByTagName('e2nextactivation').item(0).firstChild.data;
-       } catch (e) {
-               this.nextactivation = "N/A";
-       }
-       try{
-               this.firsttryprepare = xml.getElementsByTagName('e2firsttryprepare').item(0).firstChild.data;
-       } catch (e) {
-               this.firsttryprepare = "N/A";
-       }
-       try{
-               this.state = xml.getElementsByTagName('e2state').item(0).firstChild.data;
-       } catch (e) {
-               this.state = "N/A";
-       }
-       try{
-               this.repeated = xml.getElementsByTagName('e2repeated').item(0).firstChild.data;
-       } catch (e) {
-               this.repeated = "0";
-       }
-       try{
-               this.dontsave = xml.getElementsByTagName('e2dontsave').item(0).firstChild.data;
-       } catch (e) {
-               this.dontsave = "N/A";
-       }
-       try{
-               this.cancled = xml.getElementsByTagName('e2cancled').item(0).firstChild.data;
-       } catch (e) {
-               this.cancled = "N/A";
-       }
-       try{
-               this.color = xml.getElementsByTagName('e2color').item(0).firstChild.data;
-       } catch (e) {
-               this.color = "N/A";
-       }
-       try{
-               this.toggledisabled = xml.getElementsByTagName('e2toggledisabled').item(0).firstChild.data;
-       } catch (e) {
-               this.toggledisabled = "N/A";
-       }
-       try{
-               this.toggledisabledimg = xml.getElementsByTagName('e2toggledisabledimg').item(0).firstChild.data;
-       } catch (e) {
-               this.toggledisabledimg = "N/A";
-       }
+       this.servicereference = getNodeContent(xml, 'e2servicereference');
+       this.servicename = getNodeContent(xml, 'e2servicename');
+       this.eventid = getNodeContent(xml, 'e2eit');
+       this.name = getNodeContent(xml, 'e2name');
+       this.description = getNodeContent(xml, 'e2description');
+       this.descriptionextended = getNodeContent(xml, 'e2descriptionextended');
+       this.disabled = getNodeContent(xml, 'e2disabled', '0');
+       this.timebegin = getNodeContent(xml, 'e2timebegin');
+       this.timeend = getNodeContent(xml, 'e2timeend');
+       this.duration = getNodeContent(xml, 'e2duration', '0');
+       this.startprepare = getNodeContent(xml, 'e2startprepare');
+       this.justplay = getNodeContent(xml, 'e2justplay', '');
+       this.afterevent = getNodeContent(xml, 'e2afterevent', '0');
+       this.dirname = getNodeContent(xml, 'e2dirname', '/hdd/movie/');
+       this.tags = getNodeContent(xml, 'e2tags', '');
+       this.logentries = getNodeContent(xml, 'e2logentries');
+       this.tfilename = getNodeContent(xml, 'e2filename');
+       this.backoff = getNodeContent(xml, 'e2backoff');
+       this.nextactivation = getNodeContent(xml, 'e2nextactivation');
+       this.firsttryprepare = getNodeContent(xml, 'e2firsttryprepare');
+       this.state = getNodeContent(xml, 'e2state');
+       this.repeated = getNodeContent(xml, 'e2repeated', '0');
+       this.dontsave = getNodeContent(xml, 'e2dontsave');
+       this.cancled = getNodeContent(xml, 'e2cancled');
+       this.color = getNodeContent(xml, 'e2color');
+       this.toggledisabled = getNodeContent(xml, 'e2toggledisabled');
+       this.toggledisabledimg = getNodeContent(xml, 'e2toggledisabledimg');
 
        this.getColor = function(){
                return this.color;
@@ -592,27 +428,37 @@ function Timer(xml){
                return this.cancled;
        };      
 }
-// START SimpleXMLResult ehemals TimerAddResult
-function SimpleXMLResult(xml){
-       // parsing values from xml-element
-       debug('[SimpleXMLResult] init: '+xml);
+
+
+// START class TimerList
+function TimerList(xml){
+       this.xmlitems = getNamedChildren(xml, "e2timerlist", "e2timer");
+       this.timerlist = [];
+       
+       this.getArray = function(){
+               if(this.timerlist.length === 0){
+                       for(var i=0;i<this.xmlitems.length;i++){
+                               var timer = new Timer(this.xmlitems.item(i));
+                               this.timerlist.push(timer);                     
+                       }
+               }
+               
+               return this.timerlist;
+       };
+}
+//END class TimerList
+
+
+function SimpleXMLResult(xml){         
        try{
                this.xmlitems = xml.getElementsByTagName("e2simplexmlresult").item(0);
-               debug("[SimpleXMLResult] count: " + xml.getElementsByTagName("e2simplexmlresult").length);
        } catch (e) {
-               debug("[SimpleXMLResult] parsing e2simplexmlresult"+e);
+               debug("[SimpleXMLResult] parsing e2simplexmlresult" + e);
        }
-       try{
-               this.state = this.xmlitems.getElementsByTagName("e2state").item(0).firstChild.data;
-       } catch (e) {
-               debug("[SimpleXMLResult] parsing e2state"+e);
-       }
-       try{
-               this.statetext = this.xmlitems.getElementsByTagName("e2statetext").item(0).firstChild.data;
-       } catch (e) {
-               debug("[SimpleXMLResult] parsing e2statetext"+e);
-       }
-       
+
+       this.state = getNodeContent(this.xmlitems, 'e2state', 'False');
+       this.statetext = getNodeContent(this.xmlitems, 'e2statetext', 'Error Parsing XML');
+
        this.getState = function(){
                if(this.state == 'True'){
                        return true;
@@ -620,6 +466,7 @@ function SimpleXMLResult(xml){
                        return false;
                }
        };
+       
        this.getStateText = function(){
                        return this.statetext;
        };
@@ -627,57 +474,32 @@ function SimpleXMLResult(xml){
 // END SimpleXMLResult
 
 // START SimpleXMLList
-function SimpleXMLList(xml){
+function SimpleXMLList(xml, tagname){
        // parsing values from xml-element
-       debug('[SimpleXMLList] init: '+xml);
        try{
-               this.xmlitems = xml.getElementsByTagName("e2simplexmllist").item(0).getElementsByTagName("e2simplexmlitem");
-               debug("[SimpleXMLList] count: " + xml.getElementsByTagName("e2simplexmllist").length);
+               this.xmlitems = xml.getElementsByTagName(tagname);
        } catch (e) {
                debug("[SimpleXMLList] parsing e2simplexmllist"+e);
        }
+       this.xmllist = [];
+       
        this.getList = function(){
-               var lst = [];
-               for(var i=0;i<this.xmlitems.length;i++){
-                       lst.push(this.xmlitems.item(i).firstChild.data);                        
+               if(this.xmllist.length === 0){
+                       for(var i=0;i<this.xmlitems.length;i++){
+                               this.xmllist.push(this.xmlitems.item(i).firstChild.data);                       
+                       }
                }
-               return lst;
+               
+               return this.xmllist;
        };
 }
 // END SimpleXMLList
 
-//START class Settings
-function Settings(xml){
-       // parsing values from xml-element
-       //debug('init ServiceList'+xml);
-       try{
-               this.xmlitems = xml.getElementsByTagName("e2settings").item(0).getElementsByTagName("e2setting");
-               debug("[Settings] Number of items: " + this.xmlitems);
-       } catch (e) {
-               //debug("Service parsing Error");
-       }
-       this.getArray = function(){
-               var listxy = [];
-               for (var i=0;i<this.xmlitems.length;i++){
-                       var xv = new Setting(this.xmlitems.item(i));
-                       listxy.push(xv);                        
-               }
-               return listxy;
-       };
-}
-//END class Settings
 
-//START class Setting
+// START class Setting
 function Setting(xml){ 
-       // parsing values from xml-element
-       //debug('init ServiceReference'+xml);
-       try{
-               this.settingvalue = xml.getElementsByTagName('e2settingvalue').item(0).firstChild.data;
-               this.settingname = xml.getElementsByTagName('e2settingname').item(0).firstChild.data;
-               
-       } catch (e) {
-               //debug("Service parsing Error "+e);
-       }
+       this.settingvalue = getNodeContent(xml, 'e2settingvalue');
+       this.settingname = getNodeContent(xml, 'e2settingname');
        
        this.getSettingValue = function(){
                return this.settingvalue;
@@ -688,145 +510,28 @@ function Setting(xml){
        };
        
 }
-//START class FileList
-function FileList(xml){
-       // parsing values from xml-element
-       debug('[FileList] init: ' + xml);
-       try{
-               this.xmlitems = xml.getElementsByTagName("e2filelist").item(0).getElementsByTagName("e2file");
-       } catch (e) {
-               debug("[FileList] parsing Error");
-       }
-       this.getArray = function(){
-               var listxy = [];
-               for(var i=0;i<this.xmlitems.length;i++){
-                       //debug("parsing File "+i+" of "+this.xmlitems.length);
-                       var xv = new File(this.xmlitems.item(i));
-                       listxy.push(xv);                        
-               }
-               return listxy;
-       };
-}
-//END class FileList
-
-//START class File
-function File(xml){    
-       // parsing values from xml-element
-       //debug('init Movie');
-       try{
-               this.servicereference = xml.getElementsByTagName('e2servicereference').item(0).firstChild.data;
-       } catch (e) {
-               this.servicereference = "N/A";
-       }
-       this.getServiceReference = function(){
-               return this.servicereference;
-       };
-       
-       this.getNameOnly = function(){
-               if(this.root == '/') {
-                       return this.servicereference;
-               } else {
-                       return this.servicereference.replace(new RegExp('.*'+this.root, "i"), '');
-               }
-       };
-       
-       try{
-               this.isdirectory = xml.getElementsByTagName('e2isdirectory').item(0).firstChild.data;
-       } catch (e) {
-               this.isdirectory = "N/A";
-       }
-       
-       this.getIsDirectory = function(){
-               return this.isdirectory;
-       };
-       
-       try{
-               this.root = xml.getElementsByTagName('e2root').item(0).firstChild.data;
-       } catch (e) {
-               this.root = "N/A";
-       }
-       
-       this.getRoot = function(){
-               return this.root;
-       };
-}      
-//END class File
 
 
-
-//START class NoteList
-function NoteList(xml){
+// START class Settings
+function Settings(xml){
        // parsing values from xml-element
        try{
-               this.xmlitems = xml.getElementsByTagName("e2noteslist").item(0).getElementsByTagName("e2note");
+               this.xmlitems = xml.getElementsByTagName("e2settings").item(0).getElementsByTagName("e2setting");
+               debug("[Settings] Number of items: " + this.xmlitems);
        } catch (e) {
-               debug("[NoteList] parsing Error");
-       }
+               debug("[Settings] parsing Error");
+       }       
+       this.settings = [];
+       
        this.getArray = function(){
-               var listxy = [];
-               for(var i=0;i<this.xmlitems.length;i++){
-                       var xv = new Note(this.xmlitems.item(i));
-                       listxy.push(xv);                        
+               if(this.settings.length === 0){
+                       for (var i=0;i<this.xmlitems.length;i++){
+                               var setting = new Setting(this.xmlitems.item(i));
+                               this.settings.push(setting);                    
+                       }
                }
-               return listxy;
-       };
-}
-//END class NoteList
-
-//START class Note
-function Note(xml){    
-       try{
-               this.filename = xml.getElementsByTagName('e2notename').item(0).firstChild.data;
-       } catch (e) {
-               this.filename = "N/A";
-       }
-       try{
-               this.saved = xml.getElementsByTagName('e2notesaved').item(0).firstChild.data;
-       } catch (e) {
-               this.saved = "N/A";
-       }
-       try{
-               this.nameold = xml.getElementsByTagName('e2notenameold').item(0).firstChild.data;
-       } catch (e) {
-               this.nameold = "False";
-       }
-       try{
-               this.content = xml.getElementsByTagName('e2notecontent').item(0).firstChild.data;
-       } catch (e) {
-               this.content = " ";
-       }
-       try{
-               this.size = xml.getElementsByTagName('e2notesize').item(0).firstChild.data;
-       } catch (e) {
-               this.size = "N/A";
-       }
-       try{
-               this.mtime = new Date(parseInt(xml.getElementsByTagName('e2notemtime').item(0).firstChild.data, 10)*1000);
-       } catch (e) {
-               this.mtime = "N/A";
-       }
-       try{
-               this.ctime = new Date(parseInt(xml.getElementsByTagName('e2notectime').item(0).firstChild.data, 10)*1000);
-       } catch (e) {
-               this.ctime = "N/A";
-       }
-
-       this.getMTime = function(){
-               var Wochentag = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
-               var wday = Wochentag[this.mtime.getDay()];
-               var day = this.mtime.getDate();
-               var month = this.mtime.getMonth()+1;
-               var year = this.mtime.getFullYear();
-               return wday+".&nbsp;"+day+"."+month+"."+year+" "+this.mtime.getHours()+":"+this.mtime.getMinutes();
-       };
-       
-       this.getCTime = function(){
-               var Wochentag = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
-               var wday = Wochentag[this.ctime.getDay()];
-               var day = this.ctime.getDate();
-               var month = this.ctime.getMonth()+1;
-               var year = this.ctime.getFullYear();
-               return wday+".&nbsp;"+day+"."+month+"."+year+" "+this.ctime.getHours()+":"+this.ctime.getMinutes();
+               
+               return this.settings;           
        };
 }
-//END class NoteList
+//END class Settings
index 385b364..f073c79 100644 (file)
                                                <button onClick="vlcNext()" title="Next Service">
                                                        <img src="/web-data/tpl/default/streaminterface/img/control_end_blue.png" alt="&lt;&lt;" />
                                                </button>
-<!--                                           <button onClick="vlcPause()" title="Pause">-->
-<!--                                                   <img src="/web-data/tpl/default/streaminterface/img/control_pause_blue.png" alt="||" />-->
-<!--                                           </button>-->
                                                <button onClick="vlcStop()" title="Stop">
                                                        <img src="/web-data/tpl/default/streaminterface/img/control_stop_blue.png" alt="Stop" />
                                                </button>
                                                <button onClick="vlcVolumeUp()"  title="Volume Up">
                                                        <img src="/web-data/tpl/default/streaminterface/img/sound_add.png" alt="Vol+" />
                                                </button>
-                                               
+                                               <input type="checkbox" id="vlcZap" title="Also zap on TV (for Subservices)">Zap</input>
                                                <br>
                                                <span id="bouquetList"></span>
                                                <span id="channelList"></span>
index 0597efc..04a7ed5 100644 (file)
@@ -9,22 +9,22 @@ addTimerEditFormArray.eventID = 0;
 addTimerEditFormArray.locationsList = [];
 addTimerEditFormArray.tagsList = [];
 
-days = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'];
-
+var days = [ 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'su' ];
 
+var servicereftoloadepgnow = '';
 // Channel menu consists of:
-//  1. The currently selected channel, unless it is contained in 2.
-//  2. The currently selected bouquet
-//  3. The TV bouquets and the Radio bouquets
+// 1. The currently selected channel, unless it is contained in 2.
+// 2. The currently selected bouquet
+// 3. The TV bouquets and the Radio bouquets
 function addTimerFormPrepareChannelMenu() {
-       result = {};
-       tvblist = addTimerEditFormArray.TVList;
-       radioblist = addTimerEditFormArray.RadioList;
-       currbouquet = addTimerEditFormArray.currBouquetName;
-       currblist = addTimerEditFormArray.currBouquetList;
+       var result = {};
+       var tvblist = addTimerEditFormArray.TVList;
+       var radioblist = addTimerEditFormArray.RadioList;
+       var currbouquet = addTimerEditFormArray.currBouquetName;
+       var currblist = addTimerEditFormArray.currBouquetList;
 
        var found = false;
-       for (element in currblist) {
+       for (var element in currblist) {
                if (addTimerEditFormArray.channel == element) {
                        found = true;
                        break;
@@ -34,27 +34,27 @@ function addTimerFormPrepareChannelMenu() {
                result[addTimerEditFormArray.channel] = addTimerEditFormArray.channelName;
        }
        if (currbouquet) {
-               result["<Currbouquet>"] = "-- "+currbouquet+" --";
-               for (element in currblist) {
+               result["<Currbouquet>"] = "-- " + currbouquet + " --";
+               for (var element in currblist) {
                        result[element] = currblist[element];
                }
        }
        result["<Bouquets>"] = "-- Bouquets --";
-       for (element in tvblist) {
+       for (var element in tvblist) {
                result[element] = tvblist[element];
        }
-       for (element in radioblist) {
+       for (var element in radioblist) {
                result[element] = radioblist[element];
        }
        return result;
 }
 
 function addTimerFormChangeChannel(newchannel) {
-       tvblist = addTimerEditFormArray.TVList;
-       radioblist = addTimerEditFormArray.RadioList;
+       var tvblist = addTimerEditFormArray.TVList;
+       var radioblist = addTimerEditFormArray.RadioList;
        if (newchannel == "<Currbouquet>" || newchannel == "<Bouquets>") {
                // reset selection to last valid channel
-               for (i=0; i<$('channel').options.length; i++) {
+               for ( var i = 0; i < $('channel').options.length; i++) {
                        if ($('channel').options[i].value == addTimerEditFormArray.channel) {
                                $('channel').options[i].selected = true;
                                break;
@@ -62,8 +62,8 @@ function addTimerFormChangeChannel(newchannel) {
                }
                return;
        }
-       found = false;
-       for(element in tvblist) {
+       var found = false;
+       for (var element in tvblist) {
                if (element == newchannel) {
                        found = true;
                        addTimerEditFormArray.currBouquetName = tvblist[element];
@@ -72,7 +72,7 @@ function addTimerFormChangeChannel(newchannel) {
                }
        }
        if (!found) {
-               for(element in radioblist) {
+               for (var element in radioblist) {
                        if (element == newchannel) {
                                found = true;
                                addTimerEditFormArray.currBouquetName = radioblist[element];
@@ -84,15 +84,16 @@ function addTimerFormChangeChannel(newchannel) {
        if (found) {
                // bouquet selected, update menu
                servicereftoloadepgnow = newchannel;
-               if(typeof(loadedChannellist[servicereftoloadepgnow]) == "undefined") {  
-                       doRequest(url_getServices+servicereftoloadepgnow, incomingAddTimerFormChangeChannel, true);
+               if (typeof (loadedChannellist[servicereftoloadepgnow]) == "undefined") {
+                       doRequest(url_getServices + servicereftoloadepgnow,
+                                       incomingAddTimerFormChangeChannel, true);
                } else {
                        incomingAddTimerFormChangeChannel();
                }
        } else {
                // real channel selected, update channel and channelName
                addTimerEditFormArray.channel = newchannel;
-               for (i=0; i<$('channel').options.length; i++) {
+               for (i = 0; i < $('channel').options.length; i++) {
                        if ($('channel').options[i].value == newchannel) {
                                addTimerEditFormArray.channelName = $('channel').options[i].text;
                                break;
@@ -103,73 +104,74 @@ function addTimerFormChangeChannel(newchannel) {
 
 function incomingAddTimerFormChangeChannel(request) {
        var services = null;
-       if(typeof(loadedChannellist[servicereftoloadepgnow]) != "undefined"){
+       if (typeof (loadedChannellist[servicereftoloadepgnow]) != "undefined") {
                services = loadedChannellist[servicereftoloadepgnow];
-       } else if(request.readyState == 4) {
+       } else if (request.readyState == 4) {
                services = new ServiceList(getXML(request)).getArray();
-               loadedChannellist[servicereftoloadepgnow] = services;   
+               loadedChannellist[servicereftoloadepgnow] = services;
        }
-       if(services !== null) {
-               debug("[incomingAddTimerFormChangeChannel] Got "+services.length+" Services");
-               for(var i = 0; i < services.length ; i++) {
-                       reference = services[i];
-                       addTimerEditFormArray.currBouquetList[reference.getServiceReference()] = reference.getServiceName();
+       if (services !== null) {
+               debug("[incomingAddTimerFormChangeChannel] Got " + services.length + " Services");
+               for ( var i = 0; i < services.length; i++) {
+                       var reference = services[i];
+                       addTimerEditFormArray.currBouquetList[reference
+                                       .getServiceReference()] = reference.getServiceName();
                }
        }
 
-       lst = addTimerFormPrepareChannelMenu();
+       var lst = addTimerFormPrepareChannelMenu();
 
        for (i = $('channel').options.length; i !== 0; i--) {
                $('channel').options[i - 1] = null;
        }
-       for(element in lst) {
-               $('channel').options[i] = new Option(lst[element]);
-               $('channel').options[i].value = element;
-                if (element == addTimerEditFormArray.channel) {
+       for (var element in lst) {
+               $('channel').options[i] = new Option(lst[element]);
+               $('channel').options[i].value = element;
+               if (element == addTimerEditFormArray.channel) {
                        $('channel').options[i].selected = true;
                }
-               i++;
+               i++;
        }
 }
 
 function addTimerFormPrepareTagsMenu(currtags) {
-       result = {};
-       resultsuff = {};
-       taglist = addTimerEditFormArray.tagsList;
+       var result = {};
+       var resultsuff = {};
+       var taglist = addTimerEditFormArray.tagsList;
 
-       if (currtags == "") {
+       if (currtags === "") {
                i = 0;
                result[""] = "<None>";
-               for (i = 0; i < taglist.length; i++) {
+               for ( var i = 0; i < taglist.length; i++) {
                        result[taglist[i]] = taglist[i];
                }
        } else {
                result[currtags] = currtags;
-               tags = currtags.split(" ");
-               for (i = 0; i < taglist.length; i++) {
+               var tags = currtags.split(" ");
+               for ( var i = 0; i < taglist.length; i++) {
                        var res = "";
                        var found = false;
-                       for (j=0; j<tags.length; j++) {
-                               if (tags[j] != taglist[i]) {
-                                       res += " "+tags[j];
+                       for ( var j = 0; j < tags.length; j++) {
+                               if (tags[j] != taglist[i]) {
+                                       res += " " + tags[j];
                                } else {
                                        found = true;
                                }
                        }
                        if (!found) {
-                               res += " "+taglist[i];
+                               res += " " + taglist[i];
                        }
                        if (res.length > 0) {
-                               res = res.substring(1,res.length);
+                               res = res.substring(1, res.length);
                        }
                        if (found) {
-                               resultsuff[res] = "- "+taglist[i];
+                               resultsuff[res] = "- " + taglist[i];
                        } else {
-                               result[res] = "+ "+taglist[i];
+                               result[res] = "+ " + taglist[i];
                        }
                }
                if (tags.length > 1) {
-                       for (ele in resultsuff) {
+                       for (var ele in resultsuff) {
                                result[ele] = resultsuff[ele];
                        }
                }
@@ -179,125 +181,128 @@ function addTimerFormPrepareTagsMenu(currtags) {
 }
 
 function addTimerFormChangeTags(newtags) {
-       lst = addTimerFormPrepareTagsMenu(newtags);
+       var lst = addTimerFormPrepareTagsMenu(newtags);
 
-       for (i = $('tags').options.length; i !== 0; i--) {
+       for ( var i = $('tags').options.length; i !== 0; i--) {
                $('tags').options[i - 1] = null;
        }
-       
-       for(element in lst) {
-               $('tags').options[i] = new Option(lst[element]);
-               $('tags').options[i].value = element;
-               i++;
+
+       for (var element in lst) {
+               $('tags').options[i] = new Option(lst[element]);
+               $('tags').options[i].value = element;
+               i++;
        }
 }
 
-
 // Timer
-function addTimerByID(sRef,eventID,justplay){
-       if(parentPin(sRef)) {
-               debug("[addTimerByID] eventID: "+eventID);
-               doRequest(url_timeraddbyeventid+"?sRef="+sRef+"&eventid="+eventID+"&justplay="+justplay, incomingTimerAddResult, false);        
+function addTimerByID(sRef, eventID, justplay) {
+       if (parentPin(sRef)) {
+               debug("[addTimerByID] eventID: " + eventID);
+               doRequest(url_timeraddbyeventid + "?sRef=" + sRef + "&eventid=" + 
+                               eventID + "&justplay=" + justplay, incomingTimerAddResult, false);
        }
 }
 
-function incomingTimerAddResult(request){
+function incomingTimerAddResult(request) {
        debug("[incomingTimerAddResult] called");
-       if(request.readyState == 4){
+       if (request.readyState == 4) {
                var result = new SimpleXMLResult(getXML(request));
-               if(result.getState()){
+               if (result.getState()) {
                        //timer has been added
                        notify(result.getStateText(), result.getState());
                        loadTimerList();
-               }else{
+               } else {
                        notify(result.getStateText(), result.getState());
                }
        }
 }
 
-function loadTimerList(){
-       doRequest(url_timerlist, incomingTimerList, false);     
+function loadTimerList() {
+       doRequest(url_timerlist, incomingTimerList, false);
 }
 
-
-function incomingTimerList(request){
-       if(request.readyState == 4){
+function incomingTimerList(request) {
+       if (request.readyState == 4) {
                var timers = new TimerList(getXML(request)).getArray();
                debug("[incomingTimerList] Got " + timers.length + " timers");
 
-               var aftereventReadable = ['Nothing', 'Standby', 'Deepstandby/Shutdown', 'Auto'];
-               var justplayReadable = ['record', 'zap'];
-               
+               var aftereventReadable = [ 'Nothing', 'Standby',
+                               'Deepstandby/Shutdown', 'Auto' ];
+               var justplayReadable = [ 'record', 'zap' ];
+
                var namespace = [];
                var cssclass = "even";
-               
-               for ( var i = 0; i < timers.length; i++){
+
+               for ( var i = 0; i < timers.length; i++) {
                        var timer = timers[i];
-                       var beginDate = new Date(Number(timer.getTimeBegin())*1000);
-                       var endDate = new Date(Number(timer.getTimeEnd())*1000);
-                       
-                       var enDis = timer.getToggleDisabledIMG() == "on" ? "Disable Timer" : "Enable Timer";
-                       
+                       var beginDate = new Date(Number(timer.getTimeBegin()) * 1000);
+                       var endDate = new Date(Number(timer.getTimeEnd()) * 1000);
+
                        cssclass = cssclass == 'even' ? 'odd' : 'even';
-                       
-                       namespace[i] = {        
-                               'servicereference': timer.getServiceReference(),
-                               'servicename': quotes2html(timer.getServiceName()),
-                               'title': quotes2html(timer.getName()),
-                               'description': quotes2html(timer.getDescription()),
-                               'descriptionextended': quotes2html(timer.getDescriptionExtended()),
-                               'begin': timer.getTimeBegin(),
-                               'beginDate': dateToString(beginDate),
-                               'end': timer.getTimeEnd(),
-                               'endDate': dateToString(endDate),
-                               'state': timer.getState(),
-                               'duration': Math.ceil((timer.getDuration()/60)),
-                               'repeated': timer.getRepeated(),
-                               'repeatedReadable': repeatedReadable(timer.getRepeated()),
-                               'justplay': timer.getJustplay(),
-                               'justplayReadable': justplayReadable[Number(timer.getJustplay())],
-                               'afterevent': timer.getAfterevent(),
-                               'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
+
+                       namespace[i] = {
+                               'servicereference' : timer.getServiceReference(),
+                               'servicename' : quotes2html(timer.getServiceName()),
+                               'title' : quotes2html(timer.getName()),
+                               'description' : quotes2html(timer.getDescription()),
+                               'descriptionextended' : quotes2html(timer
+                                               .getDescriptionExtended()),
+                               'begin' : timer.getTimeBegin(),
+                               'beginDate' : dateToString(beginDate),
+                               'end' : timer.getTimeEnd(),
+                               'endDate' : dateToString(endDate),
+                               'state' : timer.getState(),
+                               'duration' : Math.ceil((timer.getDuration() / 60)),
+                               'repeated' : timer.getRepeated(),
+                               'repeatedReadable' : repeatedReadable(timer.getRepeated()),
+                               'justplay' : timer.getJustplay(),
+                               'justplayReadable' : justplayReadable[Number(timer
+                                               .getJustplay())],
+                               'afterevent' : timer.getAfterevent(),
+                               'aftereventReadable' : aftereventReadable[Number(timer
+                                               .getAfterevent())],
                                'dirname' : timer.getDirname(),
                                'tags' : timer.getTags(),
-                               'disabled': timer.getDisabled(),
-                               'onOff': timer.getToggleDisabledIMG(),
-                               'enDis': timer.getToggleDisabledText(),
-                               'cssclass': cssclass
-                       };                      
+                               'disabled' : timer.getDisabled(),
+                               'onOff' : timer.getToggleDisabledIMG(),
+                               'enDis' : timer.getToggleDisabledText(),
+                               'cssclass' : cssclass
+                       };
                }
-               data = { timer : namespace };
+               var data = {
+                       timer : namespace
+               };
                processTpl('tplTimerList', data, 'contentMain');
        }
 }
 
 function repeatedReadable(num) {
        num = Number(num);
-       if(num === 0) {
+       if (num === 0) {
                return "One Time";
        }
-       
+
        var retVal = "";
        var Repeated = {};
-       Repeated["Mo-Su"] =127;
+       Repeated["Mo-Su"] = 127;
        Repeated["Mo-Fr"] = 31;
-       Repeated["Su"] =    64;
-       Repeated["Sa"] =    32;
-       Repeated["Fr"] =    16;
-       Repeated["Th"] =     8;
-       Repeated["We"] =     4;
-       Repeated["Tu"] =     2;
-       Repeated["Mo"] =     1;
-       
-       for(rep in Repeated) {
-               if(rep.toString() != 'extend') {
+       Repeated["Su"] = 64;
+       Repeated["Sa"] = 32;
+       Repeated["Fr"] = 16;
+       Repeated["Th"] = 8;
+       Repeated["We"] = 4;
+       Repeated["Tu"] = 2;
+       Repeated["Mo"] = 1;
+
+       for (var rep in Repeated) {
+               if (rep.toString() != 'extend') {
                        var check = Number(Repeated[rep]);
-                       if(!(~num & check)) {
+                       if (!(~num & check)) {
                                num -= check;
-                               if(retVal === '') {
+                               if (retVal === '') {
                                        retVal += rep.toString();
                                } else {
-                                       retVal = rep.toString()+','+retVal;
+                                       retVal = rep.toString() + ',' + retVal;
                                }
                        }
                }
@@ -305,33 +310,34 @@ function repeatedReadable(num) {
        return retVal;
 }
 
-function delTimer(sRef, begin, end, servicename, title, description, readyFunction){
-       debug("[delTimer] sRef("+sRef+"),begin("+begin+"),end("+end+"),servicename("+servicename+"),title("+title+"),description("+description+")");
-       var result = confirm(
-               "Selected timer:\n"     +
-               "Channel: "+servicename+"\n" + 
-               "Title: "+title+"\n" +
-               "Description: "+description+"\n" +
-               "Are you sure that you want to delete the Timer?");
-       if(result){
-               debug("[delTimer] ok confirm panel"); 
-               doRequest(url_timerdelete+"?sRef="+sRef+"&begin="+begin+"&end="+end, readyFunction, false);
+function delTimer(sRef, begin, end, servicename, title, description,
+               readyFunction) {
+       debug("[delTimer] sRef(" + sRef + "),begin(" + begin + "),end(" + 
+                       end     + "),servicename(" + servicename + "),title(" + 
+                       title + "),description(" + description + ")");
+       var result = confirm("Selected timer:\n" + "Channel: " + servicename + "\n"     + 
+                       "Title: " + title + "\n" + "Description: " + description + "\n" + 
+                       "Are you sure that you want to delete the Timer?");
+       if (result) {
+               debug("[delTimer] ok confirm panel");
+               doRequest(url_timerdelete + "?sRef=" + sRef + "&begin=" + begin + 
+                               "&end=" + end, readyFunction, false);
                return true;
-       
+
        } else {
                debug("[delTimer] cancel confirm panel");
        }
        return false;
 }
 
-function incomingTimerDelResult(request){
+function incomingTimerDelResult(request) {
        debug("[incomingTimerDelResult] called");
-       if(request.readyState == 4){
+       if (request.readyState == 4) {
                var result = new SimpleXMLResult(getXML(request));
                notify(result.getStateText(), result.getState());
                debug("[incomingTimerDelResult] Loading List");
                loadTimerList();
-       }               
+       }
 }
 
 function loadTimerFormNow() {
@@ -342,10 +348,10 @@ function loadTimerFormNow() {
        addTimerEditFormArray.shour = now.getHours();
        addTimerEditFormArray.smin = now.getMinutes();
 
-       var     plusTwoHours = new Date(now.getTime() + ((120 *60)*1000) );
+       var plusTwoHours = new Date(now.getTime() + ((120 * 60) * 1000));
        addTimerEditFormArray.ehour = plusTwoHours.getHours();
        addTimerEditFormArray.emin = plusTwoHours.getMinutes();
-               
+
        addTimerEditFormArray.justplay = "0";
        addTimerEditFormArray.channel = "";
        addTimerEditFormArray.channelName = "";
@@ -356,28 +362,34 @@ function loadTimerFormNow() {
        addTimerEditFormArray.repeated = 0;
        addTimerEditFormArray.afterEvent = "3";
        addTimerEditFormArray.deleteOldOnSave = 0;
-       
+
        addTimerEditFormArray.beginOld = 0;
        addTimerEditFormArray.endOld = 0;
        addTimerEditFormArray.eventID = 0;
-       
+
        debug("[loadTimerFormNow] done");
        loadTimerFormTags();
 }
 
-function loadTimerEditForm(justplay, begin, end, repeated, channel, channelName, name, description, dirname, tags, afterEvent, deleteOldOnSave, eit) {
-       debug('[loadTimerEditForm] justplay: ' + justplay + ',begin: ' + begin + ',end: ' + end + ',repeated: ' + repeated + ',channel: ' + channel + ',name: ' + name +',description: ' + description +',dirname: ' + dirname +',tags: ' + tags + ',afterEvent: ' + afterEvent + ',deleteOldOnSave: ' + deleteOldOnSave);
-       var start = new Date(Number(begin)*1000);
+function loadTimerEditForm(justplay, begin, end, repeated, channel,
+               channelName, name, description, dirname, tags, afterEvent,
+               deleteOldOnSave, eit) {
+       debug('[loadTimerEditForm] justplay: ' + justplay + ',begin: ' + begin + 
+                       ',end: ' + end + ',repeated: ' + repeated + ',channel: ' + 
+                       channel + ',name: ' + name + ',description: ' + description + 
+                       ',dirname: ' + dirname + ',tags: ' + tags + ',afterEvent: '     + 
+                       afterEvent + ',deleteOldOnSave: ' + deleteOldOnSave);
+       var start = new Date(Number(begin) * 1000);
        addTimerEditFormArray.year = start.getFullYear();
        addTimerEditFormArray.month = start.getMonth() + 1;
        addTimerEditFormArray.day = start.getDate();
        addTimerEditFormArray.shour = start.getHours();
        addTimerEditFormArray.smin = start.getMinutes();
-       
-       var     stopp = new Date(Number(end)*1000);
+
+       var stopp = new Date(Number(end) * 1000);
        addTimerEditFormArray.ehour = stopp.getHours();
        addTimerEditFormArray.emin = stopp.getMinutes();
-       
+
        addTimerEditFormArray.justplay = String(justplay);
        addTimerEditFormArray.channel = String(channel);
        addTimerEditFormArray.channelName = String(channelName);
@@ -387,15 +399,17 @@ function loadTimerEditForm(justplay, begin, end, repeated, channel, channelName,
        addTimerEditFormArray.tags = String(tags);
        addTimerEditFormArray.repeated = Number(repeated);
        addTimerEditFormArray.afterEvent = afterEvent;
-       
-       debug("[loadTimerEditForm]" + justplay + "|" + begin + "|" + end + "|" + repeated + "|"+channel+"|"+name+"|"+description+"|"+dirname+"|"+tags+"|"+afterEvent);
+
+       debug("[loadTimerEditForm]" + justplay + "|" + begin + "|" + end + "|" + 
+                       repeated + "|" + channel + "|" + name + "|" + description + "|" + 
+                       dirname + "|" + tags + "|" + afterEvent);
 
        addTimerEditFormArray.deleteOldOnSave = Number(deleteOldOnSave);
        addTimerEditFormArray.beginOld = Number(begin);
        addTimerEditFormArray.endOld = Number(end);
-       
+
        addTimerEditFormArray.eventID = Number(eit);
-       
+
        loadTimerFormTags();
 }
 
@@ -403,67 +417,72 @@ function loadTimerFormTags() {
        doRequest(url_gettags, incomingTimerFormTags, false);
 }
 
-function incomingTimerFormTags(request){
+function incomingTimerFormTags(request) {
        debug("[incomingTimerFormTags] called");
-       if(request.readyState == 4){
-               var result = new SimpleXMLList(getXML(request));
+       if (request.readyState == 4) {
+               var result = new SimpleXMLList(getXML(request), "e2tag");
                addTimerEditFormArray.tagsList = result.getList();
                loadTimerFormLocations();
-       }               
+       }
 }
 
 function loadTimerFormLocations() {
        doRequest(url_getlocations, incomingTimerFormLocations, false);
 }
 
-function incomingTimerFormLocations(request){
+function incomingTimerFormLocations(request) {
        debug("[incomingTimerFormLocations] called");
-       if(request.readyState == 4){
-               var result = new SimpleXMLList(getXML(request));
+       if (request.readyState == 4) {
+               var result = new SimpleXMLList(getXML(request), "e2location");
                addTimerEditFormArray.locationsList = result.getList();
-                if (addTimerEditFormArray.locationsList.length == 0) {
-                       addTimerEditFormArray.locationsList = ["/hdd/movie"];
+               if (addTimerEditFormArray.locationsList.length === 0) {
+                       addTimerEditFormArray.locationsList = [ "/hdd/movie" ];
                }
                loadTimerFormChannels();
-       }               
+       }
 }
 
 // starting to load for TV
 function loadTimerFormChannels() {
-       if(addTimerEditFormArray.TVListFilled === 1 && addTimerEditFormArray.RadioListFilled === 1) {
+       if (addTimerEditFormArray.TVListFilled === 1 && 
+                       addTimerEditFormArray.RadioListFilled === 1) {
                loadTimerForm();
-       } else if(addTimerEditFormArray.TVListFilled === 1 && addTimerEditFormArray.RadioListFilled === 0) {
+       } else if (addTimerEditFormArray.TVListFilled === 1     && 
+                       addTimerEditFormArray.RadioListFilled === 0) {
                addTimerListFormatTV();
        } else {
-               doRequest(url_getServices+encodeURIComponent(bouquetsTv), addTimerListFormatTV, false);
+               doRequest(url_getServices + encodeURIComponent(bouquetsTv),
+                               addTimerListFormatTV, false);
        }
 }
 
 function addTimerListFormatTV(request) {
-       if(addTimerEditFormArray.RadioListFilled === 0) {
-               if(request.readyState == 4){
+       if (addTimerEditFormArray.RadioListFilled === 0) {
+               if (request.readyState == 4) {
                        var services = new ServiceList(getXML(request)).getArray();
                        var tv = {};
-                       for ( var i = 0; i < services.length ; i++){
+                       for ( var i = 0; i < services.length; i++) {
                                var reference = services[i];
-                               tv[reference.getServiceReference()] = reference.getServiceName();
+                               tv[reference.getServiceReference()] = reference
+                                               .getServiceName();
                        }
                        addTimerEditFormArray.TVListFilled = 1;
                        addTimerEditFormArray.TVList = tv;
                }
        }
-       if(addTimerEditFormArray.RadioListFilled == 1) {
+       if (addTimerEditFormArray.RadioListFilled == 1) {
                loadTimerForm();
        } else {
-               doRequest(url_getServices+encodeURIComponent(bouquetsRadio), addTimerListFormatRadio, false);
+               doRequest(url_getServices + encodeURIComponent(bouquetsRadio),
+                               addTimerListFormatRadio, false);
        }
 }
 
 function addTimerListFormatRadio(request) {
-       if(request.readyState == 4){
+       if (request.readyState == 4) {
                var services = new ServiceList(getXML(request)).getArray();
                var radio = {};
-               for ( var i = 0; i < services.length ; i++){
+               for ( var i = 0; i < services.length; i++) {
                        var reference = services[i];
                        radio[reference.getServiceReference()] = reference.getServiceName();
                }
@@ -475,88 +494,94 @@ function addTimerListFormatRadio(request) {
        loadTimerForm();
 }
 
-function loadTimerForm(){
+function loadTimerForm() {
 
        var Action = {};
        Action["0"] = "Record";
        Action["1"] = "Zap";
-       
+
        var Repeated = {};
-       Repeated["1"] =  "mo";
+       Repeated["1"] = "mo";
        Repeated["2"] = "tu";
-       Repeated["4"] =  "we";
-       Repeated["8"] =  "th";
+       Repeated["4"] = "we";
+       Repeated["8"] = "th";
        Repeated["16"] = "fr";
        Repeated["32"] = "sa";
        Repeated["64"] = "su";
        Repeated["31"] = "mf";
        Repeated["127"] = "ms";
-       
+
        var AfterEvent = {};
        AfterEvent["0"] = "Nothing";
        AfterEvent["1"] = "Standby";
        AfterEvent["2"] = "Deepstandby/Shutdown";
        AfterEvent["3"] = "Auto";
-       
-       addTimerEditFormArray.name = (typeof(addTimerEditFormArray.name) != 'undefined') ? addTimerEditFormArray.name : '';
-       addTimerEditFormArray.name = (addTimerEditFormArray.name === '') ? ' ' : addTimerEditFormArray.name;
 
-       addTimerEditFormArray.description = (typeof(addTimerEditFormArray.description) != 'undefined') ? addTimerEditFormArray.description : '';
-       addTimerEditFormArray.description = (addTimerEditFormArray.description === '') ? ' ' : addTimerEditFormArray.description;
+       addTimerEditFormArray.name = (typeof (addTimerEditFormArray.name) != 'undefined') ? addTimerEditFormArray.name
+                       : '';
+       addTimerEditFormArray.name = (addTimerEditFormArray.name === '') ? ' '
+                       : addTimerEditFormArray.name;
+
+       addTimerEditFormArray.description = (typeof (addTimerEditFormArray.description) != 'undefined') ? addTimerEditFormArray.description
+                       : '';
+       addTimerEditFormArray.description = (addTimerEditFormArray.description === '') ? ' '
+                       : addTimerEditFormArray.description;
 
-       var channelObject = addTimerFormPrepareChannelMenu(addTimerEditFormArray.TVList, addTimerEditFormArray.RadioList);
+       var channelObject = addTimerFormPrepareChannelMenu(
+                       addTimerEditFormArray.TVList, addTimerEditFormArray.RadioList);
 
        var locationsObject = {};
-       for (i = 0; i < addTimerEditFormArray.locationsList.length; i++) {
+       for ( var i = 0; i < addTimerEditFormArray.locationsList.length; i++) {
                str = addTimerEditFormArray.locationsList[i];
                locationsObject[str] = str;
        }
 
        var tagsObject = addTimerFormPrepareTagsMenu(addTimerEditFormArray.tags);
 
-       var namespace = {                                       
-                               year: createOptions(2008,2015,addTimerEditFormArray.year),
-                               month: createOptions(1,12,addTimerEditFormArray.month),
-                               day: createOptions(1,31,addTimerEditFormArray.day),
-                               shour: createOptions(0,23,addTimerEditFormArray.shour),
-                               smin: createOptions(0,59,addTimerEditFormArray.smin),
-                               ehour: createOptions(0,23,addTimerEditFormArray.ehour),
-                               emin: createOptions(0,59,addTimerEditFormArray.emin),
-                               action: createOptionList(Action, addTimerEditFormArray.justplay),
-                               channel: createOptionList(channelObject, addTimerEditFormArray.channel),
-                               afterEvent: createOptionList(AfterEvent, addTimerEditFormArray.afterEvent),
-                               repeated: createOptionListRepeated(Repeated, addTimerEditFormArray.repeated),
-                               dirname: createOptionList(locationsObject, addTimerEditFormArray.dirname),
-                               tags: createOptionList(tagsObject, addTimerEditFormArray.tags),
-
-                               timer: {
-                                       name: addTimerEditFormArray.name,
-                                       description: addTimerEditFormArray.description,
-                                       deleteOldOnSave: addTimerEditFormArray.deleteOldOnSave,
-                                       channelOld: addTimerEditFormArray.channel,
-                                       beginOld: addTimerEditFormArray.beginOld,
-                                       endOld: addTimerEditFormArray.endOld,                                   
-                                       eventID: addTimerEditFormArray.eventID
-                               }
-               };
-       data = namespace;
+       var namespace = {
+               'year' : createOptions(2008, 2015, addTimerEditFormArray.year),
+               'month' : createOptions(1, 12, addTimerEditFormArray.month),
+               'day' : createOptions(1, 31, addTimerEditFormArray.day),
+               'shour' : createOptions(0, 23, addTimerEditFormArray.shour),
+               'smin' : createOptions(0, 59, addTimerEditFormArray.smin),
+               'ehour' : createOptions(0, 23, addTimerEditFormArray.ehour),
+               'emin' : createOptions(0, 59, addTimerEditFormArray.emin),
+               'action' : createOptionList(Action, addTimerEditFormArray.justplay),
+               'channel' : createOptionList(channelObject,
+                               addTimerEditFormArray.channel),
+               'afterEvent' : createOptionList(AfterEvent,
+                               addTimerEditFormArray.afterEvent),
+               'repeated' : createOptionListRepeated(Repeated,
+                               addTimerEditFormArray.repeated),
+               'dirname' : createOptionList(locationsObject,
+                               addTimerEditFormArray.dirname),
+               'tags' : createOptionList(tagsObject, addTimerEditFormArray.tags),
+
+               'timer' : {
+                       'name' : addTimerEditFormArray.name,
+                       'description' : addTimerEditFormArray.description,
+                       'deleteOldOnSave' : addTimerEditFormArray.deleteOldOnSave,
+                       'channelOld' : addTimerEditFormArray.channel,
+                       'beginOld' : addTimerEditFormArray.beginOld,
+                       'endOld' : addTimerEditFormArray.endOld,
+                       'eventID' : addTimerEditFormArray.eventID
+               }
+       };
+       var data = namespace;
        processTpl('tplTimerEdit', data, 'contentMain');
-       /*
-       var listerHtml = RND(tplAddTimerForm, namespace);
-       $('BodyContent').innerHTML = listerHtml;
-       */
 }
 
 function createOptions(start, end, number) {
-       var namespace =[];
-       
-       for(i = start; i <= end; i++) {
+       var namespace = [];
+
+       for ( var i = start; i <= end; i++) {
                var txt = (String(i).length == 1) ? "0" + String(i) : String(i);
-               var selected =  (i == Number(number)) ? "selected" : " ";
+               var selected = (i == Number(number)) ? "selected" : " ";
                namespace[i] = {
-                       'value': i,
-                       'txt': txt,
-                       'selected': selected };
+                       'value' : i,
+                       'txt' : txt,
+                       'selected' : selected
+               };
        }
        return namespace;
 }
@@ -564,19 +589,20 @@ function createOptions(start, end, number) {
 function createOptionList(object, selected) {
        var namespace = Array();
        var i = 0;
-       for(var element in object) {
+       for ( var element in object) {
                var txt = String(object[element]);
                var sel = " ";
-               
-               if(element == selected) {
+
+               if (element == selected) {
                        sel = "selected";
                }
-               
-               if(element != "extend") {
+
+               if (element != "extend") {
                        namespace[i] = {
-                               'value': element,
-                               'txt': txt,
-                               'selected': sel };
+                               'value' : element,
+                               'txt' : txt,
+                               'selected' : sel
+                       };
                        i++;
                }
        }
@@ -585,148 +611,156 @@ function createOptionList(object, selected) {
 }
 
 function createOptionListRepeated(Repeated, repeated) {
-       num = Number(repeated);
-       
-       list = [1, 2, 4, 8, 16, 32, 64, 31, 127];
-       namespace = [];
-       checked = [];
+       var num = Number(repeated);
+
+       var list = [ 1, 2, 4, 8, 16, 32, 64, 31, 127 ];
+       var namespace = [];
+       var checked = [];
 
-       for(var i = 0; i < list.length; i++) {
+       for ( var i = 0; i < list.length; i++) {
                checked[i] = " ";
-               if (!(~num & list[list.length-1-i])) {
-                       num -= list[list.length-1-i];
+               if (!(~num & list[list.length - 1 - i])) {
+                       num -= list[list.length - 1 - i];
                        checked[i] = "checked";
                }
        }
-       for(var i = 0; i < list.length; i++) {
-               txt = String(Repeated[String(list[i])]);
-               ifString(Repeated[String(list[i])]) == "mf") {
+       for ( var i = 0; i < list.length; i++) {
+               var txt = String(Repeated[String(list[i])]);
+               if (String(Repeated[String(list[i])]) == "mf") {
                        txt = "Mo-Fr";
-               } else ifString(Repeated[String(list[i])]) == "ms") {
+               } else if (String(Repeated[String(list[i])]) == "ms") {
                        txt = "Mo-Su";
                } else {
-                       txt = txt.substr(0,1).toUpperCase() + txt.substr(1,1);
+                       txt = txt.substr(0, 1).toUpperCase() + txt.substr(1, 1);
                }
-               namespace[i] = { 'id': Repeated[String(list[i])],
-                       'name': Repeated[String(list[i])],
-                       'value': list[i],
-                       'txt': txt,
-                       'checked': checked[list.length-1-i]
+               namespace[i] = {
+                       'id' : Repeated[String(list[i])],
+                       'name' : Repeated[String(list[i])],
+                       'value' : list[i],
+                       'txt' : txt,
+                       'checked' : checked[list.length - 1 - i]
                };
        }
        return namespace;
 }
 
 function sendAddTimer() {
-       debug("[sendAddTimer]" + "parentChannel:" +$('channel').value);
-       
-       if(parentPin($('channel').value)) {
-               beginD = new Date(ownLazyNumber($('year').value), (ownLazyNumber($('month').value) - 1), ownLazyNumber($('day').value), ownLazyNumber($('shour').value), ownLazyNumber($('smin').value));
-               begin = beginD.getTime()/1000;
-               
-               endD = new Date(ownLazyNumber($('year').value), (ownLazyNumber($('month').value) - 1), ownLazyNumber($('day').value), ownLazyNumber($('ehour').value), ownLazyNumber($('emin').value));
-               end = endD.getTime()/1000;
-               if(end<begin) {
+       debug("[sendAddTimer]" + "parentChannel:" + $('channel').value);
+
+       if (parentPin($('channel').value)) {
+               var beginD = new Date(parseNr($('year').value),
+                               (parseNr($('month').value) - 1), parseNr($('day').value),
+                               parseNr($('shour').value), parseNr($('smin').value));
+               var begin = beginD.getTime() / 1000;
+
+               var endD = new Date(parseNr($('year').value),
+                               (parseNr($('month').value) - 1), parseNr($('day').value),
+                               parseNr($('ehour').value), parseNr($('emin').value));
+               var end = endD.getTime() / 1000;
+               if (end < begin) {
                        end += 86400;
                }
 
-               descriptionClean = ($('descr').value == " " || $('descr').value == "N/A") ? "" : $('descr').value;
-               nameClean = ($('name').value == " " || $('name').value == "N/A") ? "" : $('name').value;
-               
+               var descriptionClean = ($('descr').value == " " || $('descr').value == "N/A") ? ""
+                               : $('descr').value;
+               var nameClean = ($('name').value == " " || $('name').value == "N/A") ? ""
+                               : $('name').value;
+
                descriptionClean = encodeURIComponent(descriptionClean);
                nameClean = encodeURIComponent(nameClean);
-       
-               dirname = encodeURIComponent($F($('timerDir').dirname));
-               tags = encodeURIComponent($F($('timerTags').tags));
-
-               repeated = 0;
-               if($('ms').checked) {
-                       repeated = ownLazyNumber($('ms').value);
-               } else if($('mf').checked) {
-                       repeated = ownLazyNumber($('mf').value);
-                       if($('su').checked) {
-                               repeated += ownLazyNumber($('su').value);
+
+               var dirname = encodeURIComponent($F($('timerDir').dirname));
+               var tags = encodeURIComponent($F($('timerTags').tags));
+
+               var repeated = 0;
+               if ($('ms').checked) {
+                       repeated = parseNr($('ms').value);
+               } else if ($('mf').checked) {
+                       repeated = parseNr($('mf').value);
+                       if ($('su').checked) {
+                               repeated += parseNr($('su').value);
                        }
-                       if($('sa').checked) {
-                               repeated += ownLazyNumber($('sa').value);
+                       if ($('sa').checked) {
+                               repeated += parseNr($('sa').value);
                        }
                } else {
-                       for(i = 0; i < days.length; i++){
-                               if($(days[i]).checked) {
-                                       repeated += ownLazyNumber($(days[i]).value);
+                       for ( var i = 0; i < days.length; i++) {
+                               if ($(days[i]).checked) {
+                                       repeated += parseNr($(days[i]).value);
                                }
                        }
                }
                //addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'False\');
-               doRequest(url_timerchange+"?"+"sRef="+($('channel').value).replace("&quot;", '"')+"&begin="+ begin +
-                 "&end="+end+"&name="+nameClean+"&description="+descriptionClean+
-                 "&dirname="+dirname+"&tags="+tags +
-                 "&afterevent="+$('after_event').value+"&eit=0&disabled=0" +
-                 "&justplay="+ownLazyNumber($('justplay').value)+"&repeated="+repeated +
-                 "&channelOld="+$('channelOld').value +
-                 "&beginOld="+$('beginOld').value+"&endOld="+$('endOld').value +
-                 "&eventID"+$('eventID').value +
-                 "&deleteOldOnSave="+ownLazyNumber($('deleteOldOnSave').value), incomingTimerAddResult, false);
+               doRequest(url_timerchange + "?" + "sRef=" + 
+                               ($('channel').value).replace("&quot;", '"') + "&begin=" + 
+                               begin + "&end=" + end + "&name=" + nameClean + 
+                               "&description=" + descriptionClean + "&dirname=" + dirname+ 
+                               "&tags=" + tags + "&afterevent=" + $('after_event').value + 
+                               "&eit=0&disabled=0" + "&justplay=" + parseNr($('justplay').value) + 
+                               "&repeated=" + repeated + "&channelOld=" + $('channelOld').value + 
+                               "&beginOld=" + $('beginOld').value + "&endOld=" + $('endOld').value     + 
+                               "&eventID" + $('eventID').value + "&deleteOldOnSave=" + 
+                               parseNr($('deleteOldOnSave').value), incomingTimerAddResult, false
+                       );
        }
 }
 
-
-function cleanTimerListNow(){
+function cleanTimerListNow() {
        debug("[cleanTimerListNow] called");
-       result = confirm ("Do you really want to cleanup the List of Timers?");
-       if(result){
+       var result = confirm("Do you really want to cleanup the List of Timers?");
+       if (result) {
                doRequest(url_timercleanup, incomingCleanTimerListNow, false);
        }
 }
 
-
 function incomingCleanTimerListNow(request) {
-       if(request.readyState == 4){
+       if (request.readyState == 4) {
                var result = new SimpleXMLResult(getXML(request));
                notify(result.getStateText(), result.getState());
                loadTimerList();
        }
 }
 
-
-function incomingJustDoNothing(request){
+function incomingJustDoNothing(request) {
        debug("[incomingJustDoNothing] called");
 }
 
+function sendToggleTimerDisable(justplay, begin, end, repeated, channel, name,
+               description, dirname, tags, afterEvent, disabled) {
+       disabled = (parseNr(disabled) === 0) ? 1 : 0;
 
-function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,dirname,tags,afterEvent,disabled){
-       disabled = (ownLazyNumber(disabled) === 0) ? 1 : 0;
-       
-       var descriptionClean = (description == " " || description == "N/A") ? "" : description;
+       var descriptionClean = (description == " " || description == "N/A") ? ""
+                       : description;
        var nameClean = (name == " " || name == "N/A") ? "" : name;
-       
+
        nameClean = encodeURIComponent(nameClean);
        descriptionClean = encodeURIComponent(descriptionClean);
        tags = encodeURIComponent(tags);
-       
-       doRequest(url_timerchange+"?"+"sRef="+channel.replace("&quot;", '"')+"&begin="+begin +
-        "&end="+end+"&name="+nameClean+"&description="+descriptionClean+
-        "&dirname="+dirname+"&tags="+tags +
-        "&afterevent="+afterEvent+"&eit=0&disabled="+disabled +
-        "&justplay="+justplay+"&repeated="+repeated +
-        "&channelOld="+channel +
-        "&beginOld="+begin+"&endOld="+end +
-        "&deleteOldOnSave=1", incomingTimerAddResult, false);
+
+       doRequest(url_timerchange + "?" + "sRef=" + channel.replace("&quot;", '"') + 
+                       "&begin=" + begin + "&end=" + end + "&name=" + nameClean+ 
+                       "&description=" + descriptionClean + "&dirname=" + dirname + 
+                       "&tags=" + tags + "&afterevent=" + afterEvent + "&eit=0&disabled=" + 
+                       disabled + "&justplay=" + justplay + "&repeated=" + repeated +
+                       "&channelOld=" + channel + "&beginOld=" + begin + "&endOld=" + end + 
+                       "&deleteOldOnSave=1", incomingTimerAddResult, false
+               );
 }
 
 function recordNowDecision(recordNowCurrent) {
        var recordNow = "infinite";
-       if(recordNowCurrent == true){
-               recordNow = "current" 
+       if (recordNowCurrent === true) {
+               recordNow = "current";
        }
-       doRequest(url_recordnow+"?recordnow="+recordNow, incomingTimerAddResult, false);
+       doRequest(url_recordnow + "?recordnow=" + recordNow,
+                       incomingTimerAddResult, false);
 }
 
-function incomingWriteTimerListNow(request){
+function incomingWriteTimerListNow(request) {
        var result = new SimpleXMLResult(getXML(request));
        notify(result.getStateText(), result.getState());
 }
 
 function writeTimerListNow() {
-       var request = doRequest(url_timerlistwrite, incomingWriteTimerListNow);
+       doRequest(url_timerlistwrite, incomingWriteTimerListNow);
 }
index a31e83d..50f60f6 100644 (file)
@@ -1,32 +1,34 @@
-// $Header$
+//$Header$
 
-var doRequestMemory = {};
-var doRequestMemorySave = {};
-var signalPanelData = {};
-var epgListData = {};
-var bouquetsMemory = {};
-var loadedChannellist = {};
 var templates = {};
+var loadedChannellist = {};
 
-var mediaPlayerStarted = false;
+var epgListData = {};
+var signalPanelData = {};
+
+var mediaPlayerStarted = false; 
 var popUpBlockerHinted = false;
 
 var settings = null;
 var parentControlList = null;
 
-
 var requestcounter = 0;
 
 var debugWin = '';
 var signalWin = '';
 var webRemoteWin = '';
-var signalPanelUpdatePoller = '';
-var EPGListWindow = '';
+var EPGListWin = '';
 
 var currentBouquet = bouquetsTv;
 
 var updateBouquetItemsPoller = '';
 var updateCurrentPoller = '';
+var signalPanelUpdatePoller = '';
+
+var hideNotifierTimeout = '';
+
+var isActive = {};
+isActive.getCurrent = false;
 
 var currentLocation = "/hdd/movie";
 var locationsList = [];
@@ -34,49 +36,80 @@ var tagsList = [];
 
 var boxtype = "";
 
-function pollCurrent(){
-       updateCurrentPoller = setInterval(updateItems, 7500);
+function startUpdateCurrentPoller(){
+       updateCurrentPoller = setInterval(updateItems, 10000);
+}
+
+function stopUpdateCurrentPoller(){
+       clearInterval(updateCurrentPoller);
+}
+
+function getXML(request){
+       var xmlDoc = "";
+
+       if(window.ActiveXObject){ // we're on IE
+               xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+       xmlDoc.async="false";
+       xmlDoc.loadXML(request.responseText);
+       } else { //we're not on IE
+               if (!window.google || !google.gears){
+                       xmlDoc = request.responseXML;
+               } else { //no responseXML on gears
+                       xmlDoc = (new DOMParser()).parseFromString(request.responseText, "text/xml");
+               }
+       }
+
+       return xmlDoc;
 }
 /*
- * Set boxtype Variable for being able of determining model specific stuff correctly (like WebRemote)
- */
-function incomingAboutBoxtype(request){
+* Set boxtype Variable for being able of determining model specific stuff correctly (like WebRemote)
+*/
+function incomingDeviceInfoBoxtype(request){
        debug("[incomingAboutBoxtype] returned");
-       var xml = getXML(request).getElementsByTagName("e2abouts").item(0).getElementsByTagName("e2about");
-       xml = xml.item(0);
-       
-       boxtype = xml.getElementsByTagName('e2model').item(0).firstChild.data;
+       var boxtype = getXML(request).getElementsByTagName("e2devicename").item(0).firstChild.data;
+
        debug("[incomingAboutBoxtype] Boxtype: " + boxtype);
 }
 
 
 function getBoxtype(){
-       doRequest(url_about, incomingAboutBoxtype, false);
+       doRequest(url_deviceinfo, incomingDeviceInfoBoxtype, false);
 }
 
-function notify(text, state){
-       switch(state){
-               case false:
-                       $('notification').style.background = "#C00";
-                       break;
-               default:
-                       $('notification').style.background = "#85C247";
+function set(element, value){
+       element = parent.$(element);
+       if (element){
+               element.innerHTML = value;
        }
-               
-       set('notification', "<div>"+text+"</div>");
-       $('notification').appear({duration : 0.5, to: 0.9 });
-       setTimeout(hideNotifier, 3000);
 }
 
 function hideNotifier(){
-       $('notification').fade({duration : 0.5 })
+       $('notification').fade({duration : 0.5 });
+}
+
+function notify(text, state){
+       notif = $('notification');
+
+       if(notif !== null){
+               //clear possibly existing hideNotifier Timeout from previous notfication
+               clearTimeout(hideNotifierTimeout);
+               if(state === false){
+                       notif.style.background = "#C00";
+               } else {
+                       notif.style.background = "#85C247";
+               }                               
+
+               set('notification', "<div>"+text+"</div>");
+               notif.appear({duration : 0.5, to: 0.9 });
+               hideNotifierTimeout = setTimeout(hideNotifier, 7500);
+       }
 }
 
+
 function simpleResultHandler(simpleResult){
        notify(simpleResult.statetext, simpleResult.state);
 }
 
-
 function startUpdateBouquetItemsPoller(){
        debug("[startUpdateBouquetItemsPoller] called");
        updateBouquetItemsPoller = setInterval(updateItemsLazy, 60000);
@@ -89,7 +122,7 @@ function stopUpdateBouquetItemsPoller(){
 }
 
 //General Helpers
-function ownLazyNumber(num) {
+function parseNr(num) {
        if(isNaN(num)){
                return 0;
        } else {
@@ -107,14 +140,21 @@ function dec2hex(nr, len){
                                hex = "0"+hex;
                        }
                } 
-               catch(e){}
+               catch(e){
+                       //something went wrong, return -1
+                       hex = -1;
+               }
        } 
        return hex;
 }
 
 
 function quotes2html(txt) {
-       return txt.replace(/'/g, "\\'").replace(/"/g, '&quot;');
+       if(typeof(txt) != "undefined"){
+               return txt.replace(/'/g, "\\'").replace(/"/g, '&quot;');
+       } else {
+               return "";
+       }
 }
 
 function addLeadingZero(nr){
@@ -127,81 +167,45 @@ function addLeadingZero(nr){
 function dateToString(date){
 
        var dateString = "";
-       
+
        dateString += date.getFullYear();
        dateString += "-" + addLeadingZero(date.getMonth()+1);
        dateString += "-" + addLeadingZero(date.getDate());
        dateString += " " + addLeadingZero(date.getHours());
        dateString += ":" + addLeadingZero(date.getMinutes());
-               
+
        return dateString;
 }
 
 
 function showhide(id){
-       var o = $(id).style;
-       o.display = (o.display!="none")? "none":"";
+       var s = $(id).style;
+       s.display = (s.display!="none")? "none":"";
 }
 
 
 function show(id){
        try{
                $(id).style.display = "";
-       } catch(e) {}
+       } catch(e) {
+//             debug("[show] Could not show element with id: " + id);
+       }
 }
 
 
 function hide(id){
        try{
                $(id).style.display = "none";
-       } catch(e) {}
-}
-
-
-function set(element, value){
-       if(element == "CurrentService") {
-               if(value.search(/^MP3 File:/) != -1) {
-                       value = value.replace(/.*\//, '');
-               }
-       }
-       element = parent.$(element);
-       if(value.length > 550) {
-               value = value.substr(0,550) + "[...]";
-       }
-       if (element){
-               element.innerHTML = value;
-       }
-       if(navigator.userAgent.indexOf("MSIE") >=0) {
-               try{
-                       var elementscript = $('UpdateStreamReaderIEFixIFrame').$('scriptzone');
-                       if(elementscript){
-                               elementscript.innerHTML = ""; // deleting set() from page, to keep the page short and to save memory                    
-                       }
-               }
-               catch(e){}
-       }
-}
-
-
-function setComplete(element, value){
-       //debug(element+"-"+value);
-       element = parent.$(element);
-       if (element){
-               element.innerHTML = value;
-       }
-       if(navigator.userAgent.indexOf("MSIE") >= 0) {
-               elementscript= $('UpdateStreamReaderIEFixIFrame').$('scriptzone');
-               if(elementscript){
-                       elementscript.innerHTML = ""; // deleting set() from page, to keep the page short and to save memory                    
-               }
+       } catch(e) {
+//             debug("[hide] Could not hide element with id: " + id);
        }
 }
 
 
 /*
- * Sets the Loading Notification to the given HTML Element
- * @param targetElement - The element the Ajax-Loader should be set in
- */
+* Sets the Loading Notification to the given HTML Element
+* @param targetElement - The element the Ajax-Loader should be set in
+*/
 function setAjaxLoad(targetElement){
        $(targetElement).innerHTML = getAjaxLoad();
 }
@@ -237,8 +241,9 @@ function messageBox(m){
 
 function popUpBlockerHint(){
        if(!popUpBlockerHinted){
-               messageBox("Please disable your Popup-Blocker for enigma2 WebControl to work flawlessly!");
                popUpBlockerHinted = true;
+               messageBox("Please disable your Popup-Blocker for enigma2 WebControl to work flawlessly!");
+
        }
 }
 
@@ -249,7 +254,7 @@ function setWindowContent(window, html){
 
 function openPopup(title, html, width, height, x, y){
        try {
-               var popup = window.open('about:blank',title,'scrollbars=yes, width='+width+',height='+height);
+               var popup = window.open('about:blank',title,'scrollbars=yes, width='+width+',height='+height);          
                setWindowContent(popup, html);
                return popup;
        } catch(e){
@@ -258,6 +263,31 @@ function openPopup(title, html, width, height, x, y){
        }
 }
 
+function openPopupPage(title, uri, width, height, x, y){
+       try {
+               var popup = window.open(uri,title,'scrollbars=yes, width='+width+',height='+height);
+               return popup;
+       } catch(e){
+               popUpBlockerHint();
+               return "";
+       }
+}
+
+function debug(text){
+       if(DBG){
+               try{
+                       if(!debugWin.closed && debugWin.location){
+                               var inner = debugWin.document.getElementById('debugContent').innerHTML;
+                               debugWin.document.getElementById('debugContent').innerHTML = new Date().toLocaleString() + ": "+text+"<br>" + inner;
+                       }
+               } catch (Exception) {
+                       popUpBlockerHint();
+               }
+
+       }
+}
+
+
 //Template Helpers
 function saveTpl(request, tplName){
        debug("[saveTpl] saving template: " + tplName);
@@ -271,7 +301,7 @@ function renderTpl(tpl, data, domElement) {
        try{
                $(domElement).innerHTML = result;
        }catch(ex){
-//             debug("[renderTpl] exception: " + ex);
+               //              debug("[renderTpl] exception: " + ex);
        }
 }
 
@@ -279,26 +309,18 @@ function renderTpl(tpl, data, domElement) {
 function fetchTpl(tplName, callback){
        if(typeof(templates[tplName]) == "undefined") {
                var url = url_tpl+tplName+".htm";
-               var options = {
-                               asynchronous: true,
-                               method: 'GET',
-                               requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
-                               onException: function(o, e){ 
-                                                               debug("[fetchTpl] exception "+ e); 
-                                                               throw(e); 
-                                                       },                              
-                               onSuccess: function(transport){
-                                                               saveTpl(transport, tplName);
-                                                               if(typeof(callback) == 'function'){
-                                                                       callback();
-                                                               }
-                                                       },
-                               onComplete: requestFinished 
-                       };
-                       
-               var request = new Ajax.Request(url, options);
+
+               doRequest(
+                               url, 
+                               function(transport){
+                                       saveTpl(transport, tplName);
+                                       if(typeof(callback) == 'function'){
+                                               callback();
+                                       }
+                               }
+               );
        } else {
-               if(typeof(callback) != 'undefined'){
+               if(typeof(callback) == 'function'){
                        callback();
                }
        }
@@ -315,101 +337,69 @@ function incomingProcessTpl(request, data, domElement, callback){
 
 function processTpl(tplName, data, domElement, callback){
        var url = url_tpl+tplName+".htm";
-               var request = new Ajax.Request(url,
-                       {
-                               asynchronous: true,
-                               method: 'GET',
-                               requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
-                               onException: function(o, e){ 
-                                                               debug("[processTpl] exception " + e);
-                                                               debug("[processTpl] exception " + typeof(o));
-                                                               throw(e); 
-                                                       },                              
-                               onSuccess: function(transport){
-                                                               incomingProcessTpl(transport, data, domElement, callback);
-                                                       },
-                               onComplete: requestFinished 
-                       });
+
+       doRequest(url, 
+                       function(transport){
+               incomingProcessTpl(transport, data, domElement, callback);
+       }
+       );
 }
 
 //Debugging Window
 
 
 function openDebug(){
-       debugWin = openPopup("Debug", templates.tplDebug, 500, 300);
-}
-
-
-function loadAndOpenDebug(){
-       fetchTpl('tplDebug', openDebug);
-}
-
-
-function debug(text){
-       if(DBG){
-               try{
-                       if(!debugWin.closed && debugWin.location){
-                               var inner = debugWin.document.getElementById('debugContent').innerHTML;
-                               debugWin.document.getElementById('debugContent').innerHTML = new Date().toLocaleString() + ": "+text+"<br>" + inner;
-                       }
-               } catch (Exception) {
-                       popUpBlockerHint();
-               }
-                       
-       }
+       var uri = url_tpl+'tplDebug.htm';
+       debugWin = openPopupPage("Debug", uri, 500, 300);
 }
 
-
-
-// end requestindikator
-function doRequest(url, readyFunction, save){
+function doRequest(url, readyFunction){
        requestStarted();
-       doRequestMemorySave[url] = save;
-//     debug("[doRequest] Requesting: "+url);
-/*     
-       if(save == true && typeof(doRequestMemory[url]) != "undefined") {
-               readyFunction(doRequestMemory[url]);
-       } else {
-*/
+       // gears or not that's the question here
+       if (!window.google || !google.gears){ //no gears, how sad
+//             debug("NO GEARS!!");
+               var request = '';
        try{
-               var request = new Ajax.Request(url,
-                       {
-                               asynchronous: true,
-                               method: 'GET',
-                               requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
-                               onException: function(o,e){ throw(e); },                                
-                               onSuccess: function (transport, json) {
-                                                       if(typeof(doRequestMemorySave[url]) != "undefined") {
-                                                               if(doRequestMemorySave[url]) {
-//                                                                     debug("[doRequest] saving request"); 
-                                                                       doRequestMemory[url] = transport;
-                                                               }
-                                                       }
-                                                       if(typeof(readyFunction) != "undefined"){
-                                                               readyFunction(transport);
-                                                       }
-                                               },
-                               onComplete: requestFinished 
-                       });
+               request = new Ajax.Request(url,
+                               {
+                       asynchronous: true,
+                       method: 'GET',
+                       requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
+                       onException: function(o,e){ throw(e); },                                
+                       onSuccess: function (transport, json) {                                         
+                               if(typeof(readyFunction) != "undefined"){
+                                       readyFunction(transport);
+                               }
+                       },
+                       onComplete: requestFinished 
+                               });
        } catch(e) {}
-//     }
-}
-
-function getXML(request){
-       var xmlDoc = "";
-       
-       if(window.ActiveXObject){ // we're on IE
-               xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
-               xmlDoc.async="false";
-               xmlDoc.loadXML(request.responseText);
-       } else { //we're not on IE                      
-               xmlDoc = request.responseXML;
+       } else { //we're on gears!
+               try{
+                       request = google.gears.factory.create('beta.httprequest');
+                       request.open('GET', url);
+
+//                     request.setRequestHeader('Pragma', 'no-cache');
+//                     request.setRequestHeader('Cache-Control', 'must-revalidate');
+//                     request.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00
+//                     GMT');
+
+                       if( typeof(readyFunction) != "undefined" ){
+                               request.onreadystatechange = function(){                                
+                                       if(request.readyState == 4){
+                                               if(request.status == 200){                      
+                                                       readyFunction(request);
+                                               } else {
+                                                       //we COULD do some error handling here
+                                               }
+                                       }
+                               };
+                       }
+                       request.send();
+               } catch(e) {}
        }
-
-       return xmlDoc;
 }
 
-
 //Parental Control
 function incomingParentControl(request) {
        if(request.readyState == 4){
@@ -435,8 +425,20 @@ function getParentControlByRef(txt) {
 }
 
 
+//Settings
+function getSettingByName(txt) {
+       debug("[getSettingByName] (" + txt + ")");
+       for(var i = 0; i < settings.length; i++) {
+               debug("("+settings[i].getSettingName()+") (" +settings[i].getSettingValue()+")");
+               if(String(settings[i].getSettingName()) == String(txt)) {
+                       return settings[i].getSettingValue().toLowerCase();
+               } 
+       }
+       return "";
+}
+
 function parentPin(servicereference) {
-    debug ("parentPin: parentControlList");
+       debug("[parentPin] parentControlList");
        servicereference = decodeURIComponent(servicereference);
        if(parentControlList === null || String(getSettingByName("config.ParentalControl.configured")) != "true") {
                return true;
@@ -466,27 +468,19 @@ function parentPin(servicereference) {
 }
 
 
-//Settings
-function getSettingByName(txt) {
-       debug("[getSettingByName] (" + txt + ")");
-       for(var i = 0; i < settings.length; i++) {
-               debug("("+settings[i].getSettingName()+") (" +settings[i].getSettingValue()+")");
-               if(String(settings[i].getSettingName()) == String(txt)) {
-                       return settings[i].getSettingValue().toLowerCase();
-               } 
-       }
-       return "";
-}
-
-
 function incomingGetDreamboxSettings(request){
        if(request.readyState == 4){
-               var settings = new Settings(getXML(request)).getArray();
-       }
-       debug ("starte getParentControl " + getSettingByName("config.ParentalControl.configured"));
-       if(String(getSettingByName("config.ParentalControl.configured")) == "true") {
-               getParentControl();
+               settings = new Settings(getXML(request)).getArray();
+
+               debug("[incomingGetDreamboxSettings] config.ParentalControl.configured="+ getSettingByName("config.ParentalControl.configured"));
+
+               if(String(getSettingByName("config.ParentalControl.configured")) == "true") {
+                       getParentControl();
+               }
        }
+
+
+
 }
 
 
@@ -500,25 +494,24 @@ function incomingSubServiceRequest(request){
        if(request.readyState == 4){
                var services = new ServiceList(getXML(request)).getArray();
                debug("[incomingSubServiceRequest] Got " + services.length + " SubServices");
-               
+
                if(services.length > 1) {
-                       
-                       var first = services[0];
 
-                       var last = false;
+                       var first = services[0];
                        var namespace = [];
-                       
-                       //we already have the main service in our servicelist so we'll start with the second element
+
+                       // we already have the main service in our servicelist so we'll
+                       // start with the second element
                        for ( var i = 1; i < services.length ; i++){
                                var reference = services[i];
                                namespace[i] = {        
-                                       'servicereference': reference.getServiceReference(),
-                                       'servicename': reference.getServiceName()
+                                               'servicereference': reference.getServiceReference(),
+                                               'servicename': reference.getServiceName()
                                };
                        }
                        var data = { subservices : namespace };
-                       
-                       
+
+
                        var id = 'SUB'+first.getServiceReference();
                        show('tr' + id);
                        processTpl('tplSubServices', data, id);
@@ -538,20 +531,16 @@ function delayedGetSubservices(){
 
 //zap zap
 function zap(servicereference){
-       var request = new Ajax.Request( "/web/zap?sRef=" + servicereference, 
-                                               {
-                                                       asynchronous: true,
-                                                       method: 'get'
-                                               }
-                                       );
+       doRequest("/web/zap?sRef=" + servicereference);
        delayedGetSubservices();
+       updateItems();
 }
 
 //SignalPanel
 
 function updateSignalPanel(){  
        var html = templates.tplSignalPanel.process(signalPanelData);
-       
+
        if (!signalWin.closed && signalWin.location) {
                setWindowContent(signalWin, html);
        } else {
@@ -562,17 +551,17 @@ function updateSignalPanel(){
 
 function incomingSignalPanel(request){
        var namespace = {};
-       
+
        if (request.readyState == 4){
                var xml = getXML(request).getElementsByTagName("e2frontendstatus").item(0);
                namespace = {
-                       snrdb : xml.getElementsByTagName('e2snrdb').item(0).firstChild.data,
-                       snr : xml.getElementsByTagName('e2snr').item(0).firstChild.data,
-                       ber : xml.getElementsByTagName('e2ber').item(0).firstChild.data,
-                       acg : xml.getElementsByTagName('e2acg').item(0).firstChild.data
+                               snrdb : xml.getElementsByTagName('e2snrdb').item(0).firstChild.data,
+                               snr : xml.getElementsByTagName('e2snr').item(0).firstChild.data,
+                               ber : xml.getElementsByTagName('e2ber').item(0).firstChild.data,
+                               acg : xml.getElementsByTagName('e2acg').item(0).firstChild.data
                };
        }
-       
+
        signalPanelData = { signal : namespace };
        fetchTpl('tplSignalPanel', updateSignalPanel);  
 }
@@ -596,11 +585,11 @@ function openSignalPanel(){
 
 function showEpgList(){
        var html = templates.tplEpgList.process(epgListData);
-       
-       if (!EPGListWindow.closed && EPGListWindow.location) {
-               setWindowContent(EPGListWindow, html);
+
+       if (!EPGListWin.closed && EPGListWin.location) {
+               setWindowContent(EPGListWin, html);
        } else {
-               EPGListWindow = openPopup("EPG", html, 900, 500);
+               EPGListWin = openPopup("EPG", html, 900, 500);
        }
 }
 
@@ -615,27 +604,27 @@ function incomingEPGrequest(request){
                                try{
                                        var item = EPGItems[i];                         
                                        namespace[i] = {        
-                                               'date': item.getTimeDay(),
-                                               'eventid': item.getEventId(),
-                                               'servicereference': item.getServiceReference(),
-                                               'servicename': quotes2html(item.getServiceName()),
-                                               'title': quotes2html(item.getTitle()),
-                                               'titleESC': escape(item.getTitle()),
-                                               'starttime': item.getTimeStartString(), 
-                                               'duration': Math.ceil(item.getDuration()/60000), 
-                                               'description': quotes2html(item.getDescription()),
-                                               'endtime': item.getTimeEndString(), 
-                                               'extdescription': quotes2html(item.getDescriptionExtended()),
-                                               'number': String(i),
-                                               'start': item.getTimeBegin(),
-                                               'end': item.getTimeEnd()
+                                                       'date': item.getTimeDay(),
+                                                       'eventid': item.getEventId(),
+                                                       'servicereference': item.getServiceReference(),
+                                                       'servicename': quotes2html(item.getServiceName()),
+                                                       'title': quotes2html(item.getTitle()),
+                                                       'titleESC': escape(item.getTitle()),
+                                                       'starttime': item.getTimeStartString(), 
+                                                       'duration': Math.ceil(item.getDuration()/60000), 
+                                                       'description': quotes2html(item.getDescription()),
+                                                       'endtime': item.getTimeEndString(), 
+                                                       'extdescription': quotes2html(item.getDescriptionExtended()),
+                                                       'number': String(i),
+                                                       'start': item.getTimeBegin(),
+                                                       'end': item.getTimeEnd()
                                        };
-                                       
+
                                } catch (Exception) { 
                                        debug("[incomingEPGrequest] Error rendering: " + Exception);    
                                }
                        }
-                       
+
                        epgListData = {epg : namespace};
                        fetchTpl('tplEpgList', showEpgList);
                } else {
@@ -653,37 +642,37 @@ function loadEPGByServiceReference(servicereference){
 }
 
 //function extdescriptionSmall(txt,num) {
-//     if(txt.length > 410) {
-//             var shortTxt = txt.substr(0,410);
-//             txt = txt.replace(/\'\'/g, '&quot;');
-//             txt = txt.replace(/\\/g, '\\\\');
-//             txt = txt.replace(/\'/g, '\\\'');
-//             txt = txt.replace(/\"/g, '&quot;');
-//             var smallNamespace = { 'txt':txt,'number':num, 'shortTxt':shortTxt};
-//             return RND(tplEPGListItemExtend, smallNamespace);
-//     } else {
-//             return txt;
-//     }
-//}    
+//if(txt.length > 410) {
+//var shortTxt = txt.substr(0,410);
+//txt = txt.replace(/\'\'/g, '&quot;');
+//txt = txt.replace(/\\/g, '\\\\');
+//txt = txt.replace(/\'/g, '\\\'');
+//txt = txt.replace(/\"/g, '&quot;');
+//var smallNamespace = { 'txt':txt,'number':num, 'shortTxt':shortTxt};
+//return RND(tplEPGListItemExtend, smallNamespace);
+//} else {
+//return txt;
+//}
+//}
 
 function buildServiceListEPGItem(epgevent, type){
        var namespace = {       
-               'starttime': epgevent.getTimeStartString(), 
-               'title': epgevent.getTitle(), 
-               'length': Math.ceil(epgevent.duration/60) 
+                       'starttime': epgevent.getTimeStartString(), 
+                       'title': epgevent.getTitle(), 
+                       'length': Math.ceil(epgevent.duration/60) 
        };
        var data = {epg : namespace};
-       //e.innerHTML = RND(tplServiceListEPGItem, namespace);
-       
+       // e.innerHTML = RND(tplServiceListEPGItem, namespace);
+
        var id = type + epgevent.getServiceReference();
-       
+
        show('tr' + id);
-       
-               if(typeof(templates.tplServiceListEPGItem) != "undefined"){
-                       renderTpl(templates.tplServiceListEPGItem, data, id, true);
-               } else {
-                       debug("[buildServiceListEPGItem] tplServiceListEPGItem N/A");
-               }
+
+       if(typeof(templates.tplServiceListEPGItem) != "undefined"){
+               renderTpl(templates.tplServiceListEPGItem, data, id, true);
+       } else {
+               debug("[buildServiceListEPGItem] tplServiceListEPGItem N/A");
+       }
 }
 
 function incomingServiceEPGNowNext(request, type){
@@ -695,7 +684,7 @@ function incomingServiceEPGNowNext(request, type){
                        } catch (e){
                                debug("[incomingServiceEPGNowNext]" + e);
                        }
-                       
+
                        if (epgEvt.getEventId() != 'None'){
                                buildServiceListEPGItem(epgEvt, type);
                        }
@@ -713,7 +702,7 @@ function incomingServiceEPGNext(request){
 
 function loadServiceEPGNowNext(servicereference, next){
        var url = url_epgnow+servicereference;
-       
+
        if(typeof(next) == 'undefined'){
                doRequest(url, incomingServiceEPGNow, false);
        } else {
@@ -730,10 +719,11 @@ function getBouquetEpg(){
 
 
 function recordNowPopup(){
-       var result = confirm(   "OK: Record current event\n" +
-                                                       "Cancel: Start infinite recording"
-       )
-       
+       var result = confirm(   
+                       "OK: Record current event\n" +
+                       "Cancel: Start infinite recording"
+       );
+
        if( result === true || result === false){
                recordNowDecision(result);
        }
@@ -742,7 +732,7 @@ function recordNowPopup(){
 
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//++++ volume functions                            ++++
+//++++ volume functions ++++
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
 function handleVolumeRequest(request){
@@ -751,7 +741,7 @@ function handleVolumeRequest(request){
                var newvalue = b.item(0).getElementsByTagName('e2current').item(0).firstChild.data;
                var mute = b.item(0).getElementsByTagName('e2ismuted').item(0).firstChild.data;
                debug("[handleVolumeRequest] Volume " + newvalue + " | Mute: " + mute);
-               
+
                for (var i = 1; i <= 10; i++)           {
                        if ( (newvalue/10)>=i){
                                $("volume"+i).src = "/web-data/img/led_on.png";
@@ -792,9 +782,10 @@ function initVolumePanel(){
        getVolume(); 
 }
 
-//Channels and Bouquets
 
 
+//Channels and Bouquets
+
 function incomingChannellist(request){
        var services = null;
        if(typeof(loadedChannellist[currentBouquet]) != "undefined"){
@@ -806,22 +797,22 @@ function incomingChannellist(request){
        if(services !== null) {
                var namespace = {};
                var cssclass = "even";
-               
+
                for ( var i = 0; i < services.length ; i++){
-                       
+
                        cssclass = cssclass == 'even' ? 'odd' : 'even';
-                       
+
                        var service = services[i];
                        namespace[i] = {        
-                               'servicereference' : service.getServiceReference(),
-                               'servicename' : service.getServiceName(),
-                               'cssclass' : cssclass
+                                       'servicereference' : service.getServiceReference(),
+                                       'servicename' : service.getServiceName(),
+                                       'cssclass' : cssclass
                        };
                }
                var data = { 
-                       services : namespace 
+                               services : namespace 
                };
-               
+
                processTpl('tplServiceList', data, 'contentMain', getBouquetEpg);
                delayedGetSubservices();
        } else {
@@ -834,12 +825,12 @@ function loadBouquet(servicereference, name){
        debug("[loadBouquet] called");
 
        currentBouquet = servicereference;
-               
+
        setContentHd(name);
        setAjaxLoad('contentMain');
-               
+
        startUpdateBouquetItemsPoller();
-       
+
        doRequest(url_getServices+servicereference, incomingChannellist, true);
 }
 
@@ -849,7 +840,7 @@ function incomingBouquetListInitial(request){
                var bouquetList = new ServiceList(getXML(request)).getArray();
                debug("[incomingBouquetListInitial] Got " + bouquetList.length + " TV Bouquets!");      
 
-               //loading first entry of TV Favorites as default for ServiceList
+               // loading first entry of TV Favorites as default for ServiceList
                loadBouquet(bouquetList[0].getServiceReference(), bouquetList[0].getServiceName());
        }
 }
@@ -857,7 +848,7 @@ function incomingBouquetListInitial(request){
 
 function renderBouquetTable(list, target){
        debug("[renderBouquetTable] Rendering " + list.length + " Bouquets");   
-       
+
        var namespace = [];
        if (list.length < 1){
                debug("[renderBouquetTable] NO BOUQUETS!");
@@ -866,15 +857,15 @@ function renderBouquetTable(list, target){
                try{
                        var bouquet = list[i];
                        namespace[i] = {
-                               'servicereference': bouquet.getServiceReference(), 
-                               'bouquetname': bouquet.getServiceName()
+                                       'servicereference': bouquet.getServiceReference(), 
+                                       'bouquetname': bouquet.getServiceName()
                        };
                } catch (e) { }
        }
        var data = { 
-               services : namespace 
+                       services : namespace 
        };
-       
+
        processTpl('tplBouquetList', data, 'contentMain');
 }      
 
@@ -892,61 +883,66 @@ function incomingBouquetList(request){
 function initChannelList(){
        var url = url_getServices+encodeURIComponent(bouquetsTv);
        currentBouquet = bouquetsTv;
-       
+
        doRequest(url, incomingBouquetListInitial, true);
 }
 
 
 
-// Movies
+//Movies
 function initMovieList(){
        // get videodirs, last_videodir, and all tags
-       doRequest(url_getcurrlocation, initMovieList1, false);
+       doRequest(url_getcurrlocation, incomingMovieListCurrentLocation, false);
 }
 
-function initMovieList1(request){
+function incomingMovieListCurrentLocation(request){
        if(request.readyState == 4){
-               result  = new SimpleXMLList(getXML(request));
+               result  = new SimpleXMLList(getXML(request), "e2location");
                currentLocation = result.getList()[0];
-               doRequest(url_getlocations, initMovieList2, false);
+               debug("[incomingMovieListCurrentLocation].currentLocation" + currentLocation);
+               doRequest(url_getlocations, incomingMovieListLocations, false);
        }
 }
 
-function initMovieList2(request){
+function incomingMovieListLocations(request){
        if(request.readyState == 4){
-               result  = new SimpleXMLList(getXML(request));
+               result  = new SimpleXMLList(getXML(request), "e2location");
                locationsList = result.getList();
-                if (locationsList.length == 0) {
+
+               if (locationsList.length === 0) {
                        locationsList = ["/hdd/movie"];
                }
-               doRequest(url_gettags, initMovieList3, false);
+               doRequest(url_gettags, incomingMovieListTags, false);
        }
 }
 
-function initMovieList3(request){
+function incomingMovieListTags(request){
        if(request.readyState == 4){
-               result  = new SimpleXMLList(getXML(request));
+               result  = new SimpleXMLList(getXML(request), "e2tag");
                tagsList = result.getList();
        }
 }
 
-function createOptionList2(lst, selected) {
+function createOptionListSimple(lst, selected) {
        var namespace = Array();
-       var i = 0;
-        found = false;
-        for (i=0; i<lst.length; i++) {
-                if (lst[i] == selected) {
-                        found = true;
-                }
-        }
-        if (!found) {
-                lst = [selected].concat(lst);
-       }
-       for (i=0; i<lst.length; i++) {
-                namespace[i] = {
-                       'value': lst[i],
-                       'txt': lst[i],
-                       'selected': (lst[i] == selected ? "selected" : " ")};
+       var i = 0;
+       var found = false;
+
+       for (i = 0; i < lst.length; i++) {
+               if (lst[i] == selected) {
+                       found = true;
+               }
+       }
+
+       if (!found) {
+               lst = [ selected ].concat(lst);
+       }
+
+       for (i = 0; i < lst.length; i++) {
+               namespace[i] = {
+                               'value': lst[i],
+                               'txt': lst[i],
+                               'selected': (lst[i] == selected ? "selected" : " ")};
        }
 
        return namespace;
@@ -954,40 +950,41 @@ function createOptionList2(lst, selected) {
 
 function loadMovieNav(){
        // fill in menus
-       var namespace = {
-                       dirname: createOptionList2(locationsList, currentLocation),
-                       tags: createOptionList2(tagsList, "")
-                       };
-       data = namespace;
+       var data = {
+                       dirname: createOptionListSimple(locationsList, currentLocation),
+                       tags: createOptionListSimple(tagsList, "")
+       };
+
        processTpl('tplNavMovies', data, 'navContent');
 }
 
 function incomingMovieList(request){
        if(request.readyState == 4){
-               
+
                var movies = new MovieList(getXML(request)).getArray();
                debug("[incomingMovieList] Got "+movies.length+" movies");
                namespace = []; 
-               
+
                var cssclass = "even";
-               
+
                for ( var i = 0; i < movies.length; i++){
                        cssclass = cssclass == 'even' ? 'odd' : 'even';
-                       
+
                        var movie = movies[i];
                        namespace[i] = {        
-                               'servicereference': movie.getServiceReference(),
-                               'servicename': movie.getServiceName() ,
-                               'title': movie.getTitle(), 
-                               'description': movie.getDescription(), 
-                               'descriptionextended': movie.getDescriptionExtended(),
-                               'filelink': String(movie.getFilename()).substr(17,movie.getFilename().length),
-                               'filename': String(movie.getFilename()),
-                               'filesize': movie.getFilesizeMB(),
-                               'tags': movie.getTags().join(', ') ,
-                               'length': movie.getLength() ,
-                               'time': movie.getTimeDay()+"&nbsp;"+ movie.getTimeStartString(),
-                               'cssclass' : cssclass
+                                       'servicereference': escape(movie.getServiceReference()),
+                                       'servicename': movie.getServiceName(),
+                                       'title': movie.getTitle(),
+                                       'escapedTitle': escape(movie.getTitle()),
+                                       'description': movie.getDescription(), 
+                                       'descriptionextended': movie.getDescriptionExtended(),
+                                       'filelink': String(movie.getFilename()).substr(17,movie.getFilename().length),
+                                       'filename': String(movie.getFilename()),
+                                       'filesize': movie.getFilesizeMB(),
+                                       'tags': movie.getTags().join(', ') ,
+                                       'length': movie.getLength() ,
+                                       'time': movie.getTimeDay()+"&nbsp;"+ movie.getTimeStartString(),
+                                       'cssclass' : cssclass
                        };
                }
                var data = { movies : namespace };
@@ -1022,17 +1019,17 @@ function incomingDelMovieResult(request) {
 
 
 function delMovie(sref ,servicename, title, description) {
-       debug("[delMovie] File(" + sref + "), servicename(" + servicename + ")," +
-                       "title(" + title + "), description(" + description + ")");
-       
+       debug("[delMovie] File(" + unescape(sref) + "), servicename(" + servicename + ")," +
+                       "title(" + unescape(title) + "), description(" + description + ")");
+
        result = confirm( "Are you sure want to delete the Movie?\n" +
-               "Servicename: "+servicename+"\n" +
-               "Title: "+title+"\n" + 
-               "Description: "+description+"\n");
+                       "Servicename: " + servicename + "\n" +
+                       "Title: " + unescape(title) + "\n" + 
+                       "Description: " + description + "\n");
 
        if(result){
                debug("[delMovie] ok confirm panel"); 
-               doRequest(url_moviedelete+"?sRef="+sref, incomingDelMovieResult, false); 
+               doRequest(url_moviedelete+"?sRef="+unescape(sref), incomingDelMovieResult, false); 
                return true;
        }
        else{
@@ -1066,10 +1063,9 @@ function sendMessage(messagetext, messagetype, messagetimeout){
                var index = $('MessageSendFormType').selectedIndex;
                messagetype = $('MessageSendFormType').options[index].value;
        }       
-       if(ownLazyNumber(messagetype) === 0){
-               var request = doRequest(url_message+'?text='+messagetext+'&type='+messagetype+'&timeout='+messagetimeout);
-               
-               setTimeout(getMessageAnswer, ownLazyNumber(messagetimeout)*1000);
+       if(parseNr(messagetype) === 0){
+               doRequest(url_message+'?text='+messagetext+'&type='+messagetype+'&timeout='+messagetimeout);
+               setTimeout(getMessageAnswer, parseNr(messagetimeout)*1000);
        } else {
                doRequest(url_message+'?text='+messagetext+'&type='+messagetype+'&timeout='+messagetimeout, incomingMessageResult, false);
        }
@@ -1079,37 +1075,37 @@ function sendMessage(messagetext, messagetype, messagetimeout){
 //Screenshots
 function getScreenShot(what) {
        debug("[getScreenShot] called");
-       
+
        var buffer = new Image();
        var downloadStart;
        var data = {};
-       
+
        buffer.onload = function () { 
                debug("[getScreenShot] image assigned");
-               
+
                data = { img : { src : buffer.src } };  
                processTpl('tplGrab', data, 'contentMain');
 
                return true;
        };
-       
+
        buffer.onerror = function (meldung) { 
                debug("[getScreenShot] Loading image failed"); 
                return true;
        };
-       
+
        switch(what){
-               case "o":
-                       what = "&o&n";
-                       break;
-               case "v":
-                       what = "&v";
-                       break;
-               default:
-                       what = "";
-                       break;
-       }
-       
+       case "o":
+               what = "&o&n";
+               break;
+       case "v":
+               what = "&v";
+               break;
+       default:
+               what = "";
+       break;
+       }
+
        downloadStart = new Date().getTime();
        buffer.src = '/grab?format=jpg&r=720&' + what + '&filename=/tmp/' + downloadStart;
 }
@@ -1122,32 +1118,30 @@ function getOsdShot(){
        getScreenShot("o");
 }
 
-// RemoteControl Code
+//RemoteControl Code
 
 function incomingRemoteControlResult(request){
-       if(request.readyState == 4){
-               var b = getXML(request).getElementsByTagName("e2remotecontrol");
-               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;
-               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;
-       } //else {
-               //TODO Some Error Handling
+//     if(request.readyState == 4){
+//             var b = getXML(request).getElementsByTagName("e2remotecontrol");
+//             var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;
+//             var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;
 //     }
 }
 
 function openWebRemote(){
        var template = templates.tplWebRemoteOld;
-       
+
        if(boxtype == "dm8000"){
                template = templates.tplWebRemote;
        }
-       
-       
+
+
        if (!webRemoteWin.closed && webRemoteWin.location) {
                setWindowContent(webRemoteWin, template);
        } else {
                webRemoteWin = openPopup('WebRemote', template, 250, 600);
        }
-       
+
 }
 
 
@@ -1171,8 +1165,6 @@ function sendRemoteControlRequest(command){
 }
 
 
-
-
 // Array.insert( index, value ) - Insert value at index, without overwriting existing keys
 Array.prototype.insert = function( j, v ) {
        if( j>=0 ) {
@@ -1182,80 +1174,83 @@ Array.prototype.insert = function( j, v ) {
        }
 };
 
-// Array.splice() - Remove or replace several elements and return any deleted elements
+//Array.splice() - Remove or replace several elements and return any deleted
+//elements
 if( typeof Array.prototype.splice==='undefined' ) {
        Array.prototype.splice = function( a, c ) {
                var e = arguments, d = this.copy(), f = a, l = this.length;
-       
+
                if( !c ) { 
                        c = l - a; 
                }
-               
+
                for( var i = 0; i < e.length - 2; i++ ) { 
                        this[a + i] = e[i + 2]; 
                }
-               
-               
+
+
                for( var j = a; j < l - c; j++ ) { 
                        this[j + e.length - 2] = d[j - c]; 
                }
                this.length -= c - e.length + 2;
-       
+
                return d.slice( f, f + c );
        };
 }
 
 ////Recording
 //function incomingRecordingPushed(request) {
-//     if(request.readyState == 4){
-//             var timers = new TimerList(getXML(request)).getArray();
-//             debug("[incomingRecordingPushed] Got " + timers.length + " timers");
-//             
-//             var aftereventReadable = ['Nothing', 'Standby', 'Deepstandby/Shutdown', 'Auto'];
-//             var justplayReadable = ['record', 'zap'];
-//             var OnOff = ['on', 'off'];
-//             
-//             var namespace = [];
-//             
-//             for ( var i = 0; i <timers.length; i++){
-//                     var timer = timers[i];
-//
-//                     if(ownLazyNumber(timer.getDontSave()) == 1) {
-//                             var beginDate = new Date(Number(timer.getTimeBegin())*1000);
-//                             var endDate = new Date(Number(timer.getTimeEnd())*1000);
-//                             namespace[i] = {
-//                             'servicereference': timer.getServiceReference(),
-//                             'servicename': timer.getServiceName() ,
-//                             'title': timer.getName(), 
-//                             'description': timer.getDescription(), 
-//                             'descriptionextended': timer.getDescriptionExtended(), 
-//                             'begin': timer.getTimeBegin(),
-//                             'beginDate': beginDate.toLocaleString(),
-//                             'end': timer.getTimeEnd(),
-//                             'endDate': endDate.toLocaleString(),
-//                             'state': timer.getState(),
-//                             'duration': Math.ceil((timer.getDuration()/60)),
-//                             'dirname': timer.getDirname(),
-//                             'tags': timer.getTags(),
-//                             'repeated': timer.getRepeated(),
-//                             'repeatedReadable': repeatedReadable(timer.getRepeated()),
-//                             'justplay': timer.getJustplay(),
-//                             'justplayReadable': justplayReadable[Number(timer.getJustplay())],
-//                             'afterevent': timer.getAfterevent(),
-//                             'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
-//                             'disabled': timer.getDisabled(),
-//                             'onOff': OnOff[Number(timer.getDisabled())]
-//                             };
-//                     }
-//             }
-//             var data = { recordings : namespace };
-//             openPopup("Record Now", 'tplTimerListItem', data, 900, 500, "Record now window");
-//     }
+//if(request.readyState == 4){
+//var timers = new TimerList(getXML(request)).getArray();
+//debug("[incomingRecordingPushed] Got " + timers.length + " timers");
+
+//var aftereventReadable = ['Nothing', 'Standby', 'Deepstandby/Shutdown',
+//'Auto'];
+//var justplayReadable = ['record', 'zap'];
+//var OnOff = ['on', 'off'];
+
+//var namespace = [];
+
+//for ( var i = 0; i <timers.length; i++){
+//var timer = timers[i];
+
+//if(parseNr(timer.getDontSave()) == 1) {
+//var beginDate = new Date(Number(timer.getTimeBegin())*1000);
+//var endDate = new Date(Number(timer.getTimeEnd())*1000);
+//namespace[i] = {
+//'servicereference': timer.getServiceReference(),
+//'servicename': timer.getServiceName() ,
+//'title': timer.getName(),
+//'description': timer.getDescription(),
+//'descriptionextended': timer.getDescriptionExtended(),
+//'begin': timer.getTimeBegin(),
+//'beginDate': beginDate.toLocaleString(),
+//'end': timer.getTimeEnd(),
+//'endDate': endDate.toLocaleString(),
+//'state': timer.getState(),
+//'duration': Math.ceil((timer.getDuration()/60)),
+//'dirname': timer.getDirname(),
+//'tags': timer.getTags(),
+//'repeated': timer.getRepeated(),
+//'repeatedReadable': repeatedReadable(timer.getRepeated()),
+//'justplay': timer.getJustplay(),
+//'justplayReadable': justplayReadable[Number(timer.getJustplay())],
+//'afterevent': timer.getAfterevent(),
+//'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
+//'disabled': timer.getDisabled(),
+//'onOff': OnOff[Number(timer.getDisabled())]
+//};
+//}
+//}
+//var data = { recordings : namespace };
+//openPopup("Record Now", 'tplTimerListItem', data, 900, 500, "Record now
+//window");
 //}
-//
-//
+//}
+
+
 //function recordingPushed() {
-//     doRequest(url_timerlist, incomingRecordingPushed, false);
+//doRequest(url_timerlist, incomingRecordingPushed, false);
 //}
 
 
@@ -1270,88 +1265,100 @@ function ifChecked(rObj) {
 
 //About
 /*
- * Handles an incoming request for /web/about
- * Parses the Data, and calls everything needed to render the 
- * Template using the parsed data and set the result into contentMain
- * @param request - the XHR
+ * Handles an incoming request for /web/deviceinfo Parses the Data, and calls
+ * everything needed to render the Template using the parsed data and set the
+ * result into contentMain @param request - the XHR
  */
 function incomingAbout(request) {
        if(request.readyState == 4){
-               debug("[incomingAbout] returned");
-               var xml = getXML(request).getElementsByTagName("e2abouts").item(0).getElementsByTagName("e2about");
+               debug("[incomingAbout] called");
+               var xml = getXML(request).getElementsByTagName("e2deviceinfo").item(0);
+
+               var info = {};
+
+               var nims = [];
+               var hdds = [];
+               var nics = [];
+
+               var fpversion = "V"+xml.getElementsByTagName('e2fpversion').item(0).firstChild.data;
+
+               var nimnodes = xml.getElementsByTagName('e2frontends').item(0).getElementsByTagName("e2frontend");                      
+               for(var i = 0; i < nimnodes.length; i++){                                       
+                       try {
+                               var name = nimnodes.item(i).getElementsByTagName("e2name").item(0).firstChild.data;
+                               var model = nimnodes.item(i).getElementsByTagName("e2model").item(0).firstChild.data;
+                               nims[i] = { 
+                                               'name' : name, 
+                                               'model' : model
+                               };                                      
+                       } catch (e) {
+                               debug("[incomingAbout] error parsing NIM data: " + e);
+                       }
+               }
 
-               xml = xml.item(0);
-               
-               var namespace = {};
-               var ns = [];
-               
-               try{
-                       var fptext = "V"+xml.getElementsByTagName('e2fpversion').item(0).firstChild.data;
-                       
-                       
-                       var nims = xml.getElementsByTagName('e2tunerinfo').item(0).getElementsByTagName("e2nim");
-                       debug("[incomingAbout] nims: "+nims.length);
-                       for(var i = 0; i < nims.length; i++){
-                               
-                               var name = nims.item(i).getElementsByTagName("name").item(0).firstChild.data;
-                               var type = nims.item(i).getElementsByTagName("type").item(0).firstChild.data;
-                               debug("[incomingAbout]" + name);
-                               debug("[incomingAbout]" + type);
-                               ns[i] = { 'name' : name, 'type' : type};
-                               
+
+               var hddnodes = xml.getElementsByTagName('e2hdd');                       
+               for( var i = 0; i < hddnodes.length; i++){
+                       try{                    
+                               var hdd = hddnodes.item(i);
+
+                               var model       = hdd.getElementsByTagName("e2model").item(0).firstChild.data;
+                               var capacity = hdd.getElementsByTagName("e2capacity").item(0).firstChild.data;
+                               var free                = hdd.getElementsByTagName("e2free").item(0).firstChild.data;
+
+                               hdds[i] = {     
+                                               'model'         : model,
+                                               'capacity'      : capacity,
+                                               'free'          : free
+                               };
+                       } catch(e){
+                               debug("[incomingAbout] error parsing HDD data: " + e);
                        }
-                       
-                       
-                       var hdddata = xml.getElementsByTagName('e2hddinfo').item(0);
-                       
-                       var hddmodel    = hdddata.getElementsByTagName("model").item(0).firstChild.data;
-                       var hddcapacity = hdddata.getElementsByTagName("capacity").item(0).firstChild.data;
-                       var hddfree             = hdddata.getElementsByTagName("free").item(0).firstChild.data;
+               }
 
-                       namespace = {
-                               'model' : xml.getElementsByTagName('e2model').item(0).firstChild.data,  
-                               'enigmaVersion': xml.getElementsByTagName('e2enigmaversion').item(0).firstChild.data,
-                               'fpVersion': fptext,
-                               'webifversion': xml.getElementsByTagName('e2webifversion').item(0).firstChild.data,     
-                               'lanMac' : xml.getElementsByTagName('e2lanmac').item(0).firstChild.data,
-                               'lanDHCP': xml.getElementsByTagName('e2landhcp').item(0).firstChild.data,
-                               'lanIP': xml.getElementsByTagName('e2lanip').item(0).firstChild.data,
-                               'lanNetmask': xml.getElementsByTagName('e2lanmask').item(0).firstChild.data,
-                               'lanGateway': xml.getElementsByTagName('e2langw').item(0).firstChild.data,
-
-                               'hddmodel': hddmodel,
-                               'hddcapacity': hddcapacity,
-                               'hddfree': hddfree,
-                               
-                               'serviceName': xml.getElementsByTagName('e2servicename').item(0).firstChild.data,
-                               'serviceProvider': xml.getElementsByTagName('e2serviceprovider').item(0).firstChild.data,
-                               'serviceAspect': xml.getElementsByTagName('e2serviceaspect').item(0).firstChild.data,
-                               'serviceVideosize': xml.getElementsByTagName('e2servicevideosize').item(0).firstChild.data,
-                               'serviceNamespace': xml.getElementsByTagName('e2servicenamespace').item(0).firstChild.data,
-                               
-                               'vPidh': '0x'+dec2hex(xml.getElementsByTagName('e2vpid').item(0).firstChild.data, 4),
-                               'vPid': ownLazyNumber(xml.getElementsByTagName('e2vpid').item(0).firstChild.data),
-                               'aPidh': '0x'+dec2hex(xml.getElementsByTagName('e2apid').item(0).firstChild.data, 4),
-                               'aPid': ownLazyNumber(xml.getElementsByTagName('e2apid').item(0).firstChild.data),
-                               'pcrPidh': '0x'+dec2hex(xml.getElementsByTagName('e2pcrid').item(0).firstChild.data, 4),
-                               'pcrPid': ownLazyNumber(xml.getElementsByTagName('e2pcrid').item(0).firstChild.data),
-                               'pmtPidh': '0x'+dec2hex(xml.getElementsByTagName('e2pmtpid').item(0).firstChild.data, 4),
-                               'pmtPid': ownLazyNumber(xml.getElementsByTagName('e2pmtpid').item(0).firstChild.data),
-                               'txtPidh': '0x'+dec2hex(xml.getElementsByTagName('e2txtpid').item(0).firstChild.data, 4),
-                               'txtPid': ownLazyNumber(xml.getElementsByTagName('e2txtpid').item(0).firstChild.data),
-                               'tsidh': '0x'+dec2hex(xml.getElementsByTagName('e2tsid').item(0).firstChild.data, 4),
-                               'tsid': ownLazyNumber(xml.getElementsByTagName('e2tsid').item(0).firstChild.data),
-                               'onidh': '0x'+dec2hex(xml.getElementsByTagName('e2onid').item(0).firstChild.data, 4),
-                               'onid': ownLazyNumber(xml.getElementsByTagName('e2onid').item(0).firstChild.data),
-                               'sidh': '0x'+dec2hex(xml.getElementsByTagName('e2sid').item(0).firstChild.data, 4),
-                               'sid': ownLazyNumber(xml.getElementsByTagName('e2sid').item(0).firstChild.data)
-                       };                                
+               var nicnodes = xml.getElementsByTagName('e2interface');
+               for( var i = 0; i < nicnodes.length; i++){
+                       try {
+                               var nic = nicnodes.item(i);
+                               var name = nic.getElementsByTagName("e2name").item(0).firstChild.data;
+                               var mac = nic.getElementsByTagName("e2mac").item(0).firstChild.data;
+                               var dhcp = nic.getElementsByTagName("e2dhcp").item(0).firstChild.data;
+                               var ip = nic.getElementsByTagName("e2ip").item(0).firstChild.data;
+                               var gateway = nic.getElementsByTagName("e2gateway").item(0).firstChild.data;
+                               var netmask = nic.getElementsByTagName("e2netmask").item(0).firstChild.data;
+
+                               nics[i] = {
+                                               'name' : name,
+                                               'mac' : mac,
+                                               'dhcp' : dhcp,
+                                               'ip' : ip,
+                                               'gateway' : gateway,
+                                               'netmask' : netmask
+                               };
+                       } catch (e) {
+                               debug("[incomingAbout] error parsing NIC data: " + e);
+                       }
+               }
+
+               try{
+                       info = {
+                                       'useGears' : gearsEnabled(),
+                                       'devicename' : xml.getElementsByTagName('e2devicename').item(0).firstChild.data,        
+                                       'enigmaVersion': xml.getElementsByTagName('e2enigmaversion').item(0).firstChild.data,
+                                       'imageVersion': xml.getElementsByTagName('e2imageversion').item(0).firstChild.data,
+                                       'fpVersion': fpversion,
+                                       'webifversion': xml.getElementsByTagName('e2webifversion').item(0).firstChild.data                      
+                       };
                } catch (e) {
                        debug("[incomingAbout] About parsing Error" + e);
                }
 
-               var data = { about : namespace,
-                                tuner : ns};
+               var data = {    
+                               "info" : info,
+                               "hdds" : hdds,          
+                               "nics" : nics,
+                               "nims" : nims                                                                            
+               };
                processTpl('tplAbout', data, 'contentMain');
        }
 }
@@ -1361,7 +1368,7 @@ function incomingAbout(request) {
  * Show About Information in contentMain
  */
 function showAbout() {
-       doRequest(url_about, incomingAbout, false);
+       doRequest(url_deviceinfo, incomingAbout, false);
 }
 
 
@@ -1378,24 +1385,24 @@ function startDebugWindow() {
 
 
 function restartTwisted() {
-       var request = new Ajax.Request( "/web/restarttwisted", { asynchronous: true, method: "get" });
+       doRequest( "/web/restarttwisted" );
 }
 
 
 //MediaPlayer
 function sendMediaPlayer(command) {
        debug("[playFile] loading sendMediaPlayer");
-       var request = new Ajax.Request( url_mediaplayercmd+command, { asynchronous: true, method: 'get' });
+       doRequest( url_mediaplayercmd+command );
 }
 
 
 function incomingMediaPlayer(request){
        if(request.readyState == 4){
                var files = new FileList(getXML(request)).getArray();
-               
+
                debug("[loadMediaPlayer] Got "+files.length+" entries in mediaplayer filelist");
-               //listerHtml    = tplMediaPlayerHeader;
-               
+               // listerHtml = tplMediaPlayerHeader;
+
                var namespace = {};
 
                var root = files[0].getRoot();
@@ -1419,7 +1426,7 @@ function incomingMediaPlayer(request){
                                };      
                        }
                }
-               
+
                var itemnamespace = Array();
                for ( var i = 0; i <files.length; i++){
                        var file = files[i];
@@ -1430,39 +1437,39 @@ function incomingMediaPlayer(request){
                        var exec_description = 'Change to directory' + file.getServiceReference();
                        var color = '000000';                   
                        var isdir = 'true';
-                       
+
                        if (file.getIsDirectory() == "False") {
                                exec = 'playFile';
                                exec_description = 'play file';
                                color = '00BCBC';
                                isdir = 'false';
                        }
-                       
+
                        itemnamespace[i] = {
-                               'isdir' : isdir,
-                               'servicereference': file.getServiceReference(),
-                               'exec': exec,
-                               'exec_description': exec_description,
-                               'color': color,                                                 
-                               'root': file.getRoot(),
-                               'name': file.getNameOnly()
+                                       'isdir' : isdir,
+                                       'servicereference': file.getServiceReference(),
+                                       'exec': exec,
+                                       'exec_description': exec_description,
+                                       'color': color,                                                 
+                                       'root': file.getRoot(),
+                                       'name': file.getNameOnly()
                        };
-                       
+
                }
                /*
                if (root == "playlist") {
                        listerHtml += tplMediaPlayerFooterPlaylist;
                }
-               */
-               
+                */
+
                var data = { mp : namespace,
-                                items: itemnamespace
+                               items: itemnamespace
                };
-               
+
                processTpl('tplMediaPlayer', data, 'contentMain');
                var sendMediaPlayerTMP = sendMediaPlayer;
                sendMediaPlayer = false;
-               //setBodyMainContent('BodyContent');
+               // setBodyMainContent('BodyContent');
                sendMediaPlayer = sendMediaPlayerTMP;
        }               
 }
@@ -1477,7 +1484,7 @@ function loadMediaPlayer(directory){
 function playFile(file,root) {
        debug("[playFile] called");
        mediaPlayerStarted = true;
-       var request = new Ajax.Request( url_mediaplayerplay+file+"&root="+root, { asynchronous: true, method: 'get' });
+       doRequest( url_mediaplayerplay+file+"&root="+root );
 }
 
 
@@ -1489,53 +1496,45 @@ function openMediaPlayerPlaylist() {
 
 function writePlaylist() {
        debug("[playFile] loading writePlaylist");
-       var filename = prompt("Please enter a name for the playlist", "");
+       var filename = '';
+       filename = prompt("Please enter a name for the playlist", "");
+
        if(filename !== "") {
-               var request = new Ajax.Request( url_mediaplayerwrite+filename, { asynchronous: true, method: 'get' });
+               doRequest( url_mediaplayerwrite+filename );
        }
 }
 
 
 //Powerstate
 /*
- * Sets the Powerstate
- * @param newState - the new Powerstate
- * Possible Values (also see WebComponents/Sources/PowerState.py)
- * #-1: get current state
- * # 0: toggle standby
- * # 1: poweroff/deepstandby
- * # 2: rebootdreambox
- * # 3: rebootenigma
+ * Sets the Powerstate @param newState - the new Powerstate Possible Values
+ * (also see WebComponents/Sources/PowerState.py) #-1: get current state # 0:
+ * toggle standby # 1: poweroff/deepstandby # 2: rebootdreambox # 3:
+ * rebootenigma
  */
 function sendPowerState(newState){
-       var request = new Ajax.Request( url_powerstate+'?newstate='+newState, { asynchronous: true, method: 'get' });
-}
-
-
-
-function delFile(file,root) {
-       debug("[delFile] called");
-       doRequest(url_delfile+root+file, incomingDelFileResult, false);
+       doRequest( url_powerstate+'?newstate='+newState);
 }
 
 
 //Currently Running Service
 function incomingCurrent(request){
-//     debug("[incomingCurrent called]");
+       //      debug("[incomingCurrent called]");
        if(request.readyState == 4){
                try{
                        var xml = getXML(request).getElementsByTagName("e2currentserviceinformation").item(0);
-                       
-                       
+
+                       var duration = '+' + parseInt( (xml.getElementsByTagName('e2eventduration').item(0).firstChild.data / 60), 10 ) + " min";
+
                        namespace = {
-                               "servicereference" : encodeURIComponent(xml.getElementsByTagName('e2servicereference').item(0).firstChild.data),
-                               "servicename" : xml.getElementsByTagName('e2servicename').item(0).firstChild.data,
-                               "eventname" : xml.getElementsByTagName('e2eventname').item(0).firstChild.data,
-                               "duration" : xml.getElementsByTagName('e2eventduration').item(0).firstChild.data
+                                       "servicereference" : encodeURIComponent(xml.getElementsByTagName('e2servicereference').item(0).firstChild.data),
+                                       "servicename" : xml.getElementsByTagName('e2servicename').item(0).firstChild.data,
+                                       "eventname" : xml.getElementsByTagName('e2eventname').item(0).firstChild.data,
+                                       "duration" : duration 
                        };
-                       
-                       data = { current : namespace };
-                       
+
+                       var data = { current : namespace };
+
                        if(typeof(templates.tplCurrent) != "undefined"){
                                renderTpl(templates.tplCurrent, data, "currentContent");
                        } else {
@@ -1543,20 +1542,25 @@ function incomingCurrent(request){
                        }
 
                } catch (e){}
-               
+               isActive.getCurrent = false;
        }
 }
 
 
 function getCurrent(){
-       doRequest(url_getcurrent, incomingCurrent, false);
+       if(!isActive.getCurrent){
+               isActive.getCurrent = true;
+               doRequest(url_getcurrent, incomingCurrent, false);
+       }
 }
 
 
 //Navigation and Content Helper Functions
+
 /*
- * Loads all Bouquets for the given enigma2 servicereference and sets the according contentHeader
- * @param sRef - the Servicereference for the bouquet to load
+ * Loads all Bouquets for the given enigma2 servicereference and sets the
+ * according contentHeader @param sRef - the Servicereference for the bouquet to
+ * load
  */
 function getBouquets(sRef){    
        var url = url_getServices+encodeURIComponent(sRef);
@@ -1605,6 +1609,8 @@ function getAllRadio(){
        loadBouquet(allRadio, "All (Radio)");
 }
 
+
+
 /*
  * Loads dynamic content to $(contentMain) by calling a execution function
  * @param fnc - The function used to load the content
@@ -1614,7 +1620,15 @@ function loadContentDynamic(fnc, title){
        setAjaxLoad('contentMain');
        setContentHd(title);
        stopUpdateBouquetItemsPoller();
-       
+
+       fnc();
+}
+
+/*
+ * like loadContentDynamic but without the AjaxLoaderAnimation being shown
+ */
+function reloadContentDynamic(fnc, title){
+       setContentHd(title);
        fnc();
 }
 
@@ -1638,35 +1652,39 @@ function loadContentStatic(template, title){
  */
 function loadControl(control){
        switch(control){
-               case "power":
-                       loadContentStatic('tplPower', 'PowerControl');
-                       break;
-               
-               case "message":
-                       loadContentStatic('tplSendMessage', 'Send a Message');
-                       break;
-               
-               case "remote":
-                       loadAndOpenWebRemote();
-                       break;
-                       
-               case "screenshot":
-                       loadContentDynamic(getScreenShot, 'Screenshot');
-                       break;
-                       
-               case "videoshot":
-                       loadContentDynamic(getVideoShot, 'Videoshot');
-                       break;
-                       
-               case "osdshot":
-                       loadContentDynamic(getOsdShot, 'OSDshot');
-                       break;
-                       
-               default:
-                       break;
+       case "power":
+               loadContentStatic('tplPower', 'PowerControl');
+               break;
+
+       case "message":
+               loadContentStatic('tplSendMessage', 'Send a Message');
+               break;
+
+       case "remote":
+               loadAndOpenWebRemote();
+               break;
+
+       case "screenshot":
+               loadContentDynamic(getScreenShot, 'Screenshot');
+               break;
+
+       case "videoshot":
+               loadContentDynamic(getVideoShot, 'Videoshot');
+               break;
+
+       case "osdshot":
+               loadContentDynamic(getOsdShot, 'OSDshot');
+               break;
+
+       default:
+               break;
        }
 }
 
+function reloadAbout(){
+       reloadContentDynamic(showAbout, 'About');
+}
+
 /*
  * Switches Navigation Modes
  * @param mode - The Navigation Mode you want to switch to
@@ -1674,44 +1692,44 @@ function loadControl(control){
  */
 function switchMode(mode){
        switch(mode){
-               case "TV":
-                       reloadNav('tplNavTv', 'TeleVision');
-                       break;
-               
-               case "Radio":
-                       reloadNav('tplNavRadio', 'Radio');
-                       break;
-               
-               case "Movies":
-                       //The Navigation
-                       reloadNavDynamic(loadMovieNav, 'Movies');
-                       
-                       //The Movie list
-                       loadContentDynamic(loadMovieList, 'Movies');
-                       break;
-                       
-               case "Timer":
-                       //The Navigation
-                       reloadNav('tplNavTimer', 'Timer');
-                       
-                       //The Timerlist
-                       loadContentDynamic(loadTimerList, 'Timer');
-                       break;
-               
-               case "MediaPlayer":
-                       loadContentDynamic(loadMediaPlayer, 'MediaPlayer');
-                       break;
-                       
-               case "BoxControl":
-                       reloadNav('tplNavBoxControl', 'BoxControl');
-                       break;
-                       
-               case "About":
-                       loadContentDynamic(showAbout, 'About');
-                       break;
-               
-               default:
-                       break;
+       case "TV":
+               reloadNav('tplNavTv', 'TeleVision');
+               break;
+
+       case "Radio":
+               reloadNav('tplNavRadio', 'Radio');
+               break;
+
+       case "Movies":
+               //The Navigation
+               reloadNavDynamic(loadMovieNav, 'Movies');
+
+               // The Movie list
+               loadContentDynamic(loadMovieList, 'Movies');
+               break;
+
+       case "Timer":
+               //The Navigation
+               reloadNav('tplNavTimer', 'Timer');
+
+               // The Timerlist
+               loadContentDynamic(loadTimerList, 'Timer');
+               break;
+
+       case "MediaPlayer":
+               loadContentDynamic(loadMediaPlayer, 'MediaPlayer');
+               break;
+
+       case "BoxControl":
+               reloadNav('tplNavBoxControl', 'BoxControl');
+               break;
+
+       case "About":
+               loadContentDynamic(showAbout, 'About');
+               break;
+
+       default:
+               break;
        }
 }
 
@@ -1736,27 +1754,27 @@ function updateItemsLazy(bouquet){
 
 function init(){
        if(DBG){
-               loadAndOpenDebug();
+               openDebug();
        }
-       
+
        if (typeof document.body.style.maxHeight == "undefined") {
                alert("Due to the tremendous amount of work needed to get everthing to " +
-                               "work properly, there is (for now) no support for Internet Explorer Versions below 7");
+               "work properly, there is (for now) no support for Internet Explorer Versions below 7");
        }
-       
+
        getBoxtype();
-       
+
        setAjaxLoad('navContent');
        setAjaxLoad('contentMain');
-       
+
        fetchTpl('tplServiceListEPGItem');
        fetchTpl('tplCurrent'); 
        reloadNav('tplNavTv', 'TeleVision');
-       
+
        initChannelList();
        initVolumePanel();
        initMovieList();
-       
+
        updateItems();
-       pollCurrent();
+       startUpdateCurrentPoller();
 }
index f3ec0b7..34434b2 100644 (file)
@@ -7,16 +7,25 @@
        <meta content="text/html; charset=UTF-8" http-equiv="content-type">
        <title>Dreambox WebControl</title>
        
+       <!-- External libs  -->
        <script type="text/javascript" src="/web-data/lib/prototype-1.6.0.3.js"></script>
        <script type="text/javascript" src="/web-data/lib/scriptaculous.js"></script>
        <script type="text/javascript" src="/web-data/lib/shadedborder.js"></script>
        <script type="text/javascript" src="/web-data/lib/trimpath-template-1.0.38.js"></script>
+       
+       <!-- userprefs Object -->
+       <script type="text/javascript" src="/web-data/userprefs.js"></script>
                
        <!-- our stuff //-->
        <script type="text/javascript" src="/web-data/objects.js" ></script>
        <script type="text/javascript" src="/web-data/config.js" ></script>
        <script type="text/javascript" src="/web-data/tools.js" ></script>
        <script type="text/javascript" src="/web-data/timer.js" ></script>
+
+       <!-- Gears-->
+       <script type="text/javascript" src="/web-data/lib/gears_init.js"></script>
+       <script type="text/javascript" src="/web-data/gears_handler.js" ></script>
+
        
        <link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet">
        <link rel="shortcut icon" type="/web-data/image/x-icon" href="/web-data/img/favicon.ico">
index 4cc91bb..6cc68c9 100644 (file)
@@ -1,5 +1,8 @@
-<select id="bouquetSelect" onChange="onBouquetSelected()" width="100px">
-       {for b in bouquets}
-       <option id="${b.servicereference}" >${b.servicename}</option>
-       {/for}
-</select>
\ No newline at end of file
+
+<!-- tplBouquetList -->
+               <select id="bouquetSelect" onChange="onBouquetSelected()" width="100px">
+                       {for b in bouquets}
+                       <option id="${b.servicereference}" >${b.servicename}</option>
+                       {/for}
+               </select>
+<!-- tplBouquetList -->
index 6d6840a..aabee74 100644 (file)
@@ -1,6 +1,8 @@
 
+<!-- tplCurrent -->
                        <table id="currentTable">
                                <tr>
                                        <td id="currentName">${current.servicename} - ${current.eventname} (+${current.duration} min)</td>                                      
                                </tr>   
-                       </table>
\ No newline at end of file
+                       </table>
+<!-- /tplCurrent -->
index e48a8d0..b8f9bfc 100644 (file)
@@ -1,4 +1,7 @@
+
+<!-- tplServiceList -->
 <select id="channelSelect" onChange="onServiceSelected()" width="100px">
+       <option id="vlcemptyservice"></option>
        {for s in services}
        <option id="${s.servicereference}" >
        ${s.servicename}        
@@ -7,4 +10,5 @@
        {/if}
        </option>
        {/for}
-</select>
\ No newline at end of file
+</select>
+<!-- /tplServiceList -->
index 0ba3cdf..7371032 100644 (file)
                vertical-align: bottom;
                z-index: 2;             
        }
+/***********************
+ WAP
+ ***********************/
+
+       .wap a, .wap a:visited, .wap a:active{
+               color: #fff;            
+       }
 
 /***********************
  GENERAL
index 15dc5a6..c686ddb 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplAbout -->
                                                <table id="contentTable">
                                                        <tr>
                                                                <td>
                                                                                                                <td class="fullwidth">
                                                                                                                        <table cellspacing="0" class="about">
                                                                                                                                <tr>
-                                                                                                                                       <th colspan="2" class="aboutHeader">Hard- & Software</th>
+                                                                                                                                       <th colspan="2" class="aboutHeader">Device- &amp; Versioninformation</th>
                                                                                                                                </tr>
                                                                                                                                <tr>
-                                                                                                                                       <td class="aboutElementLeft">Box Model:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.model}</td>
+                                                                                                                                       <td class="aboutElementLeft">Devicename:</td>
+                                                                                                                                       <td class="aboutElementRight">${info.devicename}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">Enigma Version:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.enigmaVersion}</td>
+                                                                                                                                       <td class="aboutElementRight">${info.enigmaVersion}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
+                                                                                                                                       <td class="aboutElementLeft">Image Version:</td>
+                                                                                                                                       <td class="aboutElementRight">${info.imageVersion}</td>
+                                                                                                                               </tr>
+                                                                                                                               
+                                                                                                                               <tr>
                                                                                                                                        <td class="aboutElementLeft">Frontprozessor Version:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.fpVersion}</td>
+                                                                                                                                       <td class="aboutElementRight">${info.fpVersion}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">Webinterface Version:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.webifversion}</td>
+                                                                                                                                       <td class="aboutElementRight">${info.webifversion}</td>
                                                                                                                                </tr>
                                                                                                                        </table>
                                                                                                                </td>
                                                                                                                <td class="fullwidth">
                                                                                                                        <table cellspacing="0" class="about">
                                                                                                                                <tr>
-                                                                                                                                       <th colspan="2" class="aboutHeader">Detected Tuners</th>
+                                                                                                                                       <th colspan="2" class="aboutHeader">Tuners</th>
                                                                                                                                </tr>
-                                                                                                                               {for t in tuner}
+                                                                                                                               {for nim in nims}
                                                                                                                                <tr>
-                                                                                                                                       <td class="aboutElementLeft">${t.name}:</td>
-                                                                                                                                       <td class="aboutElementRight">${t.type}</td>
+                                                                                                                                       <td class="aboutElementLeft">${nim.name}:</td>
+                                                                                                                                       <td class="aboutElementRight">${nim.model}</td>
                                                                                                                                </tr>
                                                                                                                                {/for}
                                                                                                                        </table>
                                                                                                                </td>
                                                                                                        </tr>
+                                                                                                       {for hdd in hdds}
                                                                                                        <tr>
                                                                                                                <td class="fullwidth">
-                                                                                                                       <table cellspacing="0" class="about">
-                                                                                                                               <tr>
-                                                                                                                                       <th colspan="2" class="aboutHeader">Harddisk</th>
-                                                                                                                               </tr>
+                                                                                                                       <table cellspacing="0" class="about">                                                                                                                           
                                                                                                                                <tr>
-                                                                                                                                       <td class="aboutElementLeft">Model:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.hddmodel}</td>
+                                                                                                                                       <th colspan="2" class="aboutHeader">Harddisk (${hdd.model})</th>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">Capacity:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.hddcapacity}</td>
+                                                                                                                                       <td class="aboutElementRight">${hdd.capacity}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">Free:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.hddfree}</td>
+                                                                                                                                       <td class="aboutElementRight">${hdd.free}</td>
                                                                                                                                </tr>
                                                                                                                        </table>
                                                                                                                </td>
                                                                                                        </tr>
+                                                                                                       {/for}
+                                                                                                       {for nic in nics}
                                                                                                        <tr>
                                                                                                                <td class="fullwidth">
                                                                                                                        <table cellspacing="0" class="about">
                                                                                                                                <tr>
-                                                                                                                                       <th colspan="2" class="aboutHeader">Internal Network</th>
-                                                                                                                               </tr>                                                                                                                                                                                                                                   <tr>
+                                                                                                                                       <th colspan="2" class="aboutHeader">Network Interface (${nic.name})</th>
+                                                                                                                               </tr>
+                                                                                                                               <tr>
                                                                                                                                        <td class="aboutElementLeft">Mac Address:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.lanMac}</td>
+                                                                                                                                       <td class="aboutElementRight">${nic.mac}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">DHCP enabled:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.lanDHCP}</td>
+                                                                                                                                       <td class="aboutElementRight">${nic.dhcp}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">IP:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.lanIP}</td>
+                                                                                                                                       <td class="aboutElementRight">${nic.ip}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">Netmask:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.lanNetmask}</td>
+                                                                                                                                       <td class="aboutElementRight">${nic.netmask}</td>
                                                                                                                                </tr>
                                                                                                                                <tr>
                                                                                                                                        <td class="aboutElementLeft">Gateway:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.lanGateway}</td>
+                                                                                                                                       <td class="aboutElementRight">${nic.gateway}</td>
                                                                                                                                </tr>
                                                                                                                        </table>
                                                                                                                </td>
                                                                                                        </tr>
+                                                                                                       {/for}
                                                                                                </table>
                                                                                        </td>
                                                                                        <td class="aboutSectionRight">
                                                                                                                <td class="fullwidth">
                                                                                                                        <table cellspacing="0" class="about">
                                                                                                                                <tr>
-                                                                                                                                       <th colspan="2" class="aboutHeader">Serviceinfo</th>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">Name:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.serviceName}</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">Provider:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.serviceProvider}</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">Videoformat:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.serviceAspect}</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">Videosize:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.serviceVideosize}</td>
+                                                                                                                                       <th colspan="2" class="aboutHeader">Gears Support</th>
+                                                                                                                               </tr>
+                                                                                                                               <tr>
+                                                                                                                                       <td colspan="2"> 
+                                                                                                                                               <p>
+                                                                                                                                                       Enigma2 WebControl supports (Google) Gears to minimize the load caused on your Dreambox.
+                                                                                                                                               </p>
+                                                                                                                                               <p>
+                                                                                                                                                       It uses the LocalServer of Gears to store all static content on your Computer instead of loading it from your Dreambox all the time.
+                                                                                                                                                       Enabling Gears can speed up enigma2 WebControl quite a lot (the less power your Box has the more you will profit).
+                                                                                                                                               </p>
+                                                                                                                                               <p>
+                                                                                                                                                       To install Gears please go to <a style="text-decoration: underline" href="http://gears.google.com/" target="_blank">gears.google.com</a>.
+                                                                                                                                               </p>
+                                                                                                                                               <p>
+                                                                                                                                                       For technical information about Gears please read the API Doc at <a style="text-decoration: underline" href="http://code.google.com/intl/de-DE/apis/gears/" target="_blank">code.google.com/intl/de-DE/apis/gears/</a>
+                                                                                                                                               </p>
+                                                                                                                                       </td>
+                                                                                                                               </tr>
+                                                                                                                               <tr>
+                                                                                                                                       <td class="aboutElementLeft">
+                                                                                                                                       {if info.useGears}
+                                                                                                                                               <button onClick="disableGears(reloadAbout)">Disable Gears</button>
+                                                                                                                                       {else}
+                                                                                                                                               <button onClick="enableGears(reloadAbout)">Enable Gears</button>
+                                                                                                                                       {/if}
+                                                                                                                                       </td>
+                                                                                                                                       <td class="aboutElementRight">
+                                                                                                                                               <div id="gearsProcess"></div>
+                                                                                                                                       </td>
                                                                                                                                </tr>
                                                                                                                        </table>
                                                                                                                </td>
-                                                                                                       </tr>    
-                                                                                                       <tr>
-                                                                                                               <td class="fullwidth">
-                                                                                                                       <table cellspacing="0" class="about">
-                                                                                                                               <tr>
-                                                                                                                                       <th colspan="2" class="aboutHeader">Pids</th>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">VideoPid:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.vPidh} (${about.vPid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">AudioPid:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.aPidh} (${about.aPid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">PCRPid:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.pcrPidh} (${about.pcrPid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">PMTPid:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.pmtPidh} (${about.pmtPid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">TXTPid:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.txtPidh} (${about.txtPid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">TSID:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.tsidh} (${about.tsid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">ONID:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.onidh} (${about.onid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                               <tr>
-                                                                                                                                       <td class="aboutElementLeft">SID:</td>
-                                                                                                                                       <td class="aboutElementRight">${about.sidh} (${about.sid}d)</td>
-                                                                                                                               </tr>
-                                                                                                                       </table>
-                                                                                                               </td>
-                                                                                                       </tr>
+                                                                                                       </tr>                                                                                                   
                                                                                                </table>
                                                                                        </td>
                                                                                </tr>
                                                                        </table>
                                                                </tr>
                                                        </td>
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplAbout -->
index cfbecad..1674f42 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplBouquetList -->
                                                <table id="contentTable">
                                                        {for service in services}
                                                        <tr><td>
@@ -24,4 +25,5 @@
                                                                <table><tr><td>No Bouquets to Display</td></tr></table>
                                                        </td></tr>
                                                        {/for}          
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplBouquetList -->
index 076a5d2..7f37e8c 100644 (file)
@@ -1,4 +1,4 @@
-
+<!-- tplCurrent -->
                        <table id="currentTable">
                                <tr>
                                        <td id="currentName">${current.servicename} - ${current.eventname}</td>
@@ -12,4 +12,5 @@
                                                ${current.duration}
                                        </td>
                                </tr>   
-                       </table>
\ No newline at end of file
+                       </table>
+<!-- /tplCurrent -->
index fb5a0fe..3910632 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"
        "http://www.w3.org/TR/html4/loose.dtd">
 <html>
+<!-- tplDebug -->
        <head>
                <meta content="text/html; charset=UTF-8" http-equiv="content-type">
                <title>Enigma2 WebControl - DEBUG</title>
@@ -8,4 +9,5 @@
        <body style="color:#000; scrollbar: auto;">
                <div id="debugContent" style="font-size: 10px"></div>
        </body>
-</html>
\ No newline at end of file
+<!-- /tplDebug -->
+</html>
index 6f68a7f..38ecb6e 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"
-       "http://www.w3.org/TR/html4/loose.dtd">
+       "http://www.w3.org/TR/html4/loose.dtd">  
 <html>
+<!-- tplEpgList -->     
        <head>
                <meta content="text/html; charset=UTF-8" http-equiv="content-type">
                <title>Enigma2 WebControl - EPG</title>
@@ -48,4 +49,5 @@
                        </tr>
                </table>
        </body>
-</html>
\ No newline at end of file
+<!-- /tplEpgList -->
+</html>
index 535d6ad..63a34fa 100644 (file)
@@ -1,8 +1,10 @@
 
+<!-- tplGrab -->
                                                <table id="contentTable">
                                                        <tr>
                                                                <td>
                                                                        <img id="grabPageImg" src="${img.src}" alt="loading image">
                                                                </td>
                                                        </tr>
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplGrab -->
index 7d95d9e..f836f88 100644 (file)
@@ -1,3 +1,5 @@
+
+<!-- tplMediaplayer -->
 <table id="contentTable">
        <tr>
                <td>
@@ -50,4 +52,5 @@
                        </table>
                </td>
        </tr>
-</table>
\ No newline at end of file
+</table>
+<!-- /tplMediaplayer -->
index e5f359c..1aa9b3d 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplMovieList -->
                                                <table id="contentTable">
                                                        {for movie in movies}
                                                        <tr>
@@ -26,7 +27,7 @@
                                                                                                </a>
                                                                                        </td>
                                                                                        <td>
-                                                                                               <a href="#" onclick="delMovie('${movie.servicereference}','${movie.servicename}','${movie.title}','${movie.description}');">
+                                                                                               <a href="#" onclick="delMovie('${movie.servicereference}','${movie.servicename}','${movie.escapedTitle}','${movie.description}');">
                                                                                                        <img src="/web-data/img/delete.png" title="Delete ${movie.title}" border="0">
                                                                                                </a>
                                                                                        </td>
@@ -57,3 +58,4 @@
                                                        </tr>
                                                        {/for}          
                                                </table>
+<!-- /tplMovieList -->
index 9497828..7ea5a0b 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplNavBoxControl -->
 <table id="navExtras" class="navTable">
        <tr>
                <td><a href="#" onclick="loadControl('power');">PowerControl</a><td>
@@ -18,4 +19,5 @@
        <tr>
                <td><a href="#" onclick="loadControl('osdshot')">Screenshot (OSD)</a><td>
        </tr>   
-</table>
\ No newline at end of file
+</table>
+<!-- /tplNavBoxControl -->
index d9926bb..f65a365 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplNavMovies -->
 <table id="navTimer" class="navTable">
        <tr>
                <td>Movie Location:</td>
@@ -25,4 +26,4 @@
                </td>
        </tr>
 </table>
-
+<!-- /tplNavMovies -->
index 71b2941..44b62e6 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplNavRadio -->
 <table id="navRadio" class="navTable">
        <tr>
                <td><a href="#" onclick="loadContentDynamic(getBouquetsRadio, 'Bouquets (Radio)');">Bouquets</a><td>
@@ -9,4 +10,5 @@
        <tr>
                <td><a href="#" onclick="loadContentDynamic(getAllRadio, 'All (Radio)');">All</a><td>
        </tr>
-</table>
\ No newline at end of file
+</table>
+<!-- /tplNavRadio -->
index 3891c65..ddc1513 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplNavTimer -->
 <table id="navTimer" class="navTable">
        <tr>
                <td><a href="#" onclick="loadTimerList();">Show/Edit Timers</a><td>
@@ -6,4 +7,5 @@
        <tr>
                <td><a href="#" onclick="loadTimerFormNow();">Add new Timer</a><td>
        </tr>
-</table>
\ No newline at end of file
+</table>
+<!-- /tplNavTimer -->
index d111cbe..7acdb47 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplNavTv -->
 <table id="navTv" class="navTable">
        <tr>
                <td><a href="#" onclick="loadContentDynamic(getBouquetsTv, 'Bouquets (TV)');">Bouquets</a><td>
@@ -9,4 +10,5 @@
        <tr>
                <td><a href="#" onclick="loadContentDynamic(getAllTv, 'All (Tv)');">All</a><td>
        </tr>
-</table>
\ No newline at end of file
+</table>
+<!-- /tplNavTv -->
index d5760a1..2066697 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplPower -->
                                                <table id="contentTable">
                                                        <tr>
                                                                <td>
@@ -18,4 +19,5 @@
                                                                        </table>
                                                                </tr>
                                                        </td>
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplPower -->
index af3a35b..9fa8190 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplSendMessage -->
                                                <table id="contentTable">
                                                        <tr>
                                                                <td>
@@ -28,4 +29,5 @@
                                                                        </table>
                                                                </td>
                                                        </tr>
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplSendMessage -->
index ec4cd40..9aecc70 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplServiceList -->
                                                <table id="contentTable">
                                                        {for service in services}
                                                        <tr>
@@ -42,4 +43,5 @@
                                                                </td>
                                                        </tr>
                                                        {/for}          
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplServiceList -->
index 7c1ea89..89a36a5 100644 (file)
@@ -1,4 +1,5 @@
-       
+
+<!-- tplServiceListEPGItem --> 
        {if epg.title != 'None'} 
        <table cellspacing="0">
                <tr>
@@ -8,3 +9,4 @@
                </tr>
        </table>
        {/if}
+<!-- /tplServiceListEPGItem -->
index aa4d167..a16f7a0 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"
        "http://www.w3.org/TR/html4/loose.dtd">
 <html>
+<!-- tplSignalPanel -->
        <head>
                <meta content="text/html; charset=UTF-8" http-equiv="content-type">
                <title>Enigma2 WebControl - EPG</title>
@@ -31,5 +32,5 @@
                        </tr>
                </table>
        </body>
-</html>
-
+<!-- /tplSignalPanel -->
+</html>
\ No newline at end of file
index 0f99e12..6b3a1f9 100644 (file)
@@ -1,4 +1,5 @@
-                                                               
+
+<!-- tplSubServices -->                                                                
                                                                {for s in subservices}                          
                                                                        <table style="width: 776px;">
                                                                                <tr>
@@ -16,4 +17,5 @@
                                                                                        </td>                                                                                   
                                                                                </tr>
                                                                        </table>
-                                                               {/for}
\ No newline at end of file
+                                                               {/for}
+<!-- /tplSubServices -->
index 7631163..8d6ed65 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplTimerEdit -->
                                                <table id="contentTable">
                                                        <tr>
                                                                <td>
                                                                </td>
                                                        </tr>
                                                </table>
-                                                       
+<!-- /tplTimerEdit -->
index ef986cf..2bdfbdb 100644 (file)
@@ -1,4 +1,5 @@
 
+<!-- tplTimerList -->
                                                <table id="contentTable" style="width: 100%;">
                                                        {for t in timer}
                                                        <tr style="width:100%;">
@@ -43,4 +44,5 @@
                                                        <tr style="width:100%;">
                                                                <td colspan="7"><button onclick="cleanTimerListNow()">Cleanup</button></td>
                                                        </tr>
-                                               </table>
\ No newline at end of file
+                                               </table>
+<!-- /tplTimerList -->
index 3c18d9a..ae76e94 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"
        "http://www.w3.org/TR/html4/loose.dtd">
 <html>
+<!-- tplWebRemote -->
        <head>
                <meta content="text/html; charset=UTF-8" http-equiv="content-type">
                <title>Enigma2 Webremote</title>
@@ -61,4 +62,5 @@
                </center>
 
        </body>
+<!-- /tplWebRemote -->
 </html>
\ No newline at end of file
index 9b47192..ead7712 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"
        "http://www.w3.org/TR/html4/loose.dtd">
 <html>
+<!-- tplWebRemoteOld -->
        <head>
                <meta content="text/html; charset=UTF-8" http-equiv="content-type">
                <title>Enigma2 Webremote</title>
@@ -60,4 +61,5 @@
                </center>
 
        </body>
+<!-- /tplWebRemoteOld -->
 </html>
\ No newline at end of file
diff --git a/webinterface/src/web-data/userprefs.js b/webinterface/src/web-data/userprefs.js
new file mode 100644 (file)
index 0000000..36fa125
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * This code is inspired by http://www.phpied.com/json-javascript-cookies/
+ * and modified for use with prototype
+ * It's a pretty straight forward way to store and load settings in a nice to use JSON-Object
+ */ 
+
+var userprefs = {
+       data : {},
+
+       load : function() {
+               var the_cookie = document.cookie.split(';');
+               if (the_cookie[0]) {
+                       this.data = unescape(the_cookie[0]).evalJSON();
+               }
+               return this.data;
+       },
+
+       save : function(expires, path) {
+               var d = expires || new Date(2222, 01, 01);
+               var p = path || '/';
+               document.cookie = escape( Object.toJSON(this.data) ) + ';path=' + p
+                               + ';expires=' + d.toUTCString();
+       }
+};
+
+userprefs.load();
\ No newline at end of file
index e192809..f7eaa4b 100644 (file)
@@ -3,232 +3,284 @@ var vlc = '';
 /*
  * incoming request-data for Current Service Epg
  */
-function incomingVLCServiceEPG(request){
+function incomingVLCServiceEPG(request) {
        if (request.readyState == 4) {
-               var events = getXML(request).getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");                       
-               
-               var event =new EPGEvent(events.item(0));
+               var events = getXML(request).getElementsByTagName("e2eventlist")
+                               .item(0).getElementsByTagName("e2event");
+
+               var event = new EPGEvent(events.item(0));
                var namespace = {
-                               'servicename' : event.getServiceName(),
-                               'eventname': event.getTitle(),
-                               'duration': ( parseInt( (event.duration/60) , 10) )                             
-                               };
-               
-               var data = { 'current' : namespace };           
-               processTpl('streaminterface/tplCurrent', data, 'current');              
+                       'servicename' : event.getServiceName(),
+                       'eventname' : event.getTitle(),
+                       'duration' : (parseInt((event.duration / 60), 10))
+               };
+
+               var data = {
+                       'current' : namespace
+               };
+               processTpl('streaminterface/tplCurrent', data, 'current');
        }
 }
 
-
 /*
-* Load Now information for Service
-*/
-function loadVLCEPGServiceNow(servicereference){
+ * Load Now information for Service
+ */
+function loadVLCEPGServiceNow(servicereference) {
        doRequest(url_epgservicenow + servicereference, incomingVLCServiceEPG);
 }
 
-function onServiceSelected(){
-       sref =$('channelSelect').options[$('channelSelect').selectedIndex].id;
-
-       //load epgNow
-       loadVLCEPGServiceNow(sref);     
+function onServiceSelected() {
+       var sref = $('channelSelect').options[$('channelSelect').selectedIndex].id;
        
-       setStreamTarget(sref);
+       if(sref !== "vlcemptyservice"){
+               loadVLCEPGServiceNow(sref);
+               setStreamTarget(sref);
+               
+               if($('vlcZap').checked){                        
+                       doRequest("/web/zap?sRef=" + sref);                     
+               }
+               delayedLoadVlcSubservices();
+       } else {
+               vlcStop();
+       }
 }
 
-function incomingVLCBouquetList(request){
+function incomingVLCBouquetList(request) {
        if (request.readyState == 4) {
                var bouquets = new ServiceList(getXML(request)).getArray();
-               
+
                var namespace = [];
-               for(var i = 0; i < bouquets.length; i++){
+               for ( var i = 0; i < bouquets.length; i++) {
                        var bouquet = bouquets[i];
-                       
+
                        namespace[i] = {
-                                       "servicereference"      : bouquet.getServiceReference(),
-                                       "servicename"           : bouquet.getServiceName()
+                               "servicereference" : bouquet.getServiceReference(),
+                               "servicename" : bouquet.getServiceName()
                        };
                }
-               data = { bouquets : namespace };
-               
+               data = {
+                       bouquets : namespace
+               };
+
                processTpl('streaminterface/tplBouquetList', data, 'bouquetList');
                loadVLCBouquet(bouquets[0].getServiceReference());
        }
 }
 
+function loadVLCBouquet(servicereference) {
+       loadVLCChannelList(servicereference);
+}
+
+function incomingVLCSubservices(request){
+       if (request.readyState == 4) {
+               var services = new ServiceList(getXML(request)).getArray();
+               debug("[incomincVLCSubservices] Got " + services.length + " SubServices");
+               
+               if(services.length > 1) {
+
+                       var first = services[0];
+                       
+                       var lastoption = $(services[0].getServiceReference());
+                       
+                       if(lastoption !== null){
+                               // we already have the main service in our servicelist so we'll
+                               // start with the second element
+                               for ( var i = 1; i < services.length ; i++){
+                                       var service = services[i];
+                                       
+                                       //TODO: FIX THIS UGLY CODE
+                                       var option = $(service.getServiceReference());
+                                       if(option !== null){
+                                               option.remove();
+                                       }
+                                       option = new Option(' |- ' + service.getServiceName());
+                                       option.id =  service.getServiceReference();
+                                       
+                                       lastoption.insert( { after : option } );
+                                       
+                                       lastoption = option;
+                               }
+                       }
+               }
+       }
+}
+
+function loadVlcSubservices(){
+       doRequest(url_subservices, incomingVLCSubservices);
+}
 
-function loadVLCBouquet(servicereference){ 
-       loadVLCChannelList(servicereference);   
+function delayedLoadVlcSubservices(){
+       setTimeout(loadVlcSubservices, 7500);
 }
 
 /*
-* Incoming request-data for EPG Now information
-* Builds the Channellist
-*/
-function incomingVLCChannelList(request){
+ * Incoming request-data for EPG Now information
+ * Builds the Channellist
+ */
+function incomingVLCChannelList(request) {
        if (request.readyState == 4) {
-               var events = getXML(request).getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");                       
+               var events = getXML(request).getElementsByTagName("e2eventlist")
+                               .item(0).getElementsByTagName("e2event");
 
                var namespace = [];
 
-               for(var i = 0; i < events.length; i++){
+               for ( var i = 0; i < events.length; i++) {
                        var event = new EPGEvent(events.item(i));
                        var eventname = event.getTitle();
-               
-                       if(eventname.length > 40){
+
+                       if (eventname.length > 40) {
                                eventname = eventname.substring(0, 40) + '...';
                        }
-                       
+
                        namespace[i] = {
-                               'servicereference' : event.getServiceReference(),
-                               'servicename' : event.getServiceName(),
-                               'eventname' : eventname,
-                               'duration' : ( parseInt( (event.duration/60) , 10) )
+                               'servicereference' : event.getServiceReference(),
+                               'servicename' : event.getServiceName(),
+                               'eventname' : eventname,
+                               'duration' : (parseInt((event.duration / 60), 10))
                        };
                }
-               
-               var data = { 'services' : namespace };          
+
+               var data = {
+                       'services' : namespace
+               };
                processTpl('streaminterface/tplServiceList', data, 'channelList');
-       }       
+       }
 }
 
 /*
-* Load List of all Channels with epg now where available
-*/
-function loadVLCChannelList(bouquetreference){
+ * Load List of all Channels with epg now where available
+ */
+function loadVLCChannelList(bouquetreference) {
        doRequest(url_epgnow + bouquetreference, incomingVLCChannelList);
 }
 
-function vlcPlay(){
-       try{
+function vlcPlay() {
+       try {
                onServiceSelected();
-       } catch(e){
+       } catch (e) {
                notify("Nothing to play", false);
        }
 }
 
-function vlcPrev(){
-       if(     $('channelSelect').selectedIndex > 0 ){ 
+function vlcPrev() {
+       if ($('channelSelect').selectedIndex > 0) {
                $('channelSelect').selectedIndex -= 1;
                onServiceSelected();
        }
 }
 
-function vlcNext(){
-       if($('channelSelect').selectedIndex < $('channelSelect').length - 1 ){
+function vlcNext() {
+       if ($('channelSelect').selectedIndex < $('channelSelect').length - 1) {
                $('channelSelect').selectedIndex += 1;
                onServiceSelected();
        }
 }
 
-function vlcPause(){
+function vlcPause() {
        vlc.playlist.togglePause();
 }
 
-function vlcStop(){
-       try{
+function vlcStop() {
+       try {
                vlc.playlist.stop();
-       } catch(e) {
+       } catch (e) {
                notify("Nothing to stop", false);
        }
 }
 
-function vlcVolumeUp(){
-       if(vlc.audio.volume < 200){
-               if(vlc.audio.volume + 10 > 200){
+function vlcVolumeUp() {
+       if (vlc.audio.volume < 200) {
+               if (vlc.audio.volume + 10 > 200) {
                        vlc.audio.volume = 200;
                } else {
                        vlc.audio.volume += 10;
                }
        }
-       
+
        set('vlcVolume', vlc.audio.volume);
 }
 
-function vlcVolumeDown(){
-       if(vlc.audio.volume > 0){
-               if(vlc.audio.volume < 10){
+function vlcVolumeDown() {
+       if (vlc.audio.volume > 0) {
+               if (vlc.audio.volume < 10) {
                        vlc.audio.volume = 0;
                } else {
                        vlc.audio.volume -= 10;
                }
        }
-       
+
        set('vlcVolume', vlc.audio.volume);
 }
 
-function vlcToogleMute(){
+function vlcToogleMute() {
        vlc.audio.mute = !vlc.audio.mute;
-       if(vlc.audio.mute){
+       if (vlc.audio.mute) {
                set('vlcVolume', 'Muted');
        } else {
                set('vlcVolume', vlc.audio.volume);
        }
 }
 
-function vlcFullscreen(){      
-       if(vlc.playlist.isPlaying){
-               if(vlc.input.hasVout){
+function vlcFullscreen() {
+       if (vlc.playlist.isPlaying) {
+               if (vlc.input.hasVout) {
                        vlc.video.fullscreen = true;
                        return;
-               } 
+               }
        }
 
-       notify("Cannot enable fullscreen mode when no Video is being played!", false);
+       notify("Cannot enable fullscreen mode when no Video is being played!",
+                       false);
 }
 
-function vlcTeletext(){
-       try{
+function vlcTeletext() {
+       try {
                vlc.video.teletext = 100;
-       } catch(e) {
+       } catch (e) {
                debug("Error - Could not set teletext");
        }
        debug("Current Teletext Page:" + vlc.video.teletext);
 }
 
-function playUrl(url){
-       current = vlc.playlist.add(url);                
-       vlc.playlist.playItem(current); 
+function playUrl(url) {
+       current = vlc.playlist.add(url);
+       vlc.playlist.playItem(current);
 }
 
-function setStreamTarget(servicereference){
-       host = top.location.host;       
-       url = 'http://'+host+':8001/'+decodeURIComponent(servicereference);
-       
+function setStreamTarget(servicereference) {
+       host = top.location.host;
+       url = 'http://' + host + ':8001/' + decodeURIComponent(servicereference);
+
        debug("setStreamTarget " + url);
-       vlc.playlist.clear();           
+       vlc.playlist.clear();
        playUrl(url);
 }
 
-
-
-function loadVLCBouquets(){
+function loadVLCBouquets() {
        url = url_getServices + bouquetsTv;
        doRequest(url, incomingVLCBouquetList);
 }
 
 /*
-* Event when the user selected a Bouquet in the bouquets <select>
-*/
-function onBouquetSelected(){  
-       var servicereference =$('bouquetSelect').options[$('bouquetSelect').selectedIndex].id;  
+ * Event when the user selected a Bouquet in the bouquets <select>
+ */
+function onBouquetSelected() {
+       var servicereference = $('bouquetSelect').options[$('bouquetSelect').selectedIndex].id;
        loadVLCBouquet(servicereference);
 }
 
-
-
-function initWebTv(){
-       if(DBG){
-               loadAndOpenDebug();             
+function initWebTv() {
+       if (DBG) {
+               openDebug();
        }
-       
+
        vlc = $("vlc");
-       
-       try{
+
+       try {
                set('vlcVolume', vlc.audio.volume);
-       } catch (e){}
+       } catch (e) {
+               debug('[initWebTv] Error on initializing WebTv');
+       }
 
        loadVLCBouquets();
 }
-
-
index cab56d3..67dafba 100644 (file)
@@ -1,37 +1,49 @@
 <e2:screen name="AboutWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2abouts><e2:element source="About" ><e2:convert type="web:ListFiller" >
-       &lt;e2about>
-               &lt;e2enigmaversion><e2:item name="enigmaVersion" filter="xml"/>&lt;/e2enigmaversion>
-
+<e2abouts>
+       <e2about>
+               <e2enigmaversion><e2:element source="EnigmaVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2enigmaversion>
+               <e2imageversion><e2:element source="ImageVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2imageversion>
+               <e2webifversion><e2:element source="WebIfVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2webifversion>
+               <e2fpversion><e2:element source="FpVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2fpversion>
+               <e2model><e2:element source="DeviceName"><e2:convert type="web:TextToHTML" /></e2:element></e2model>
+               
+               <e2:element source="About" ><e2:convert type="web:ListFiller" > 
                &lt;e2lanmac><e2:item name="lanMac" filter="xml"/>&lt;/e2lanmac>
                &lt;e2landhcp><e2:item name="lanDHCP" filter="xml"/>&lt;/e2landhcp>
                &lt;e2lanip><e2:item name="lanIP" filter="xml"/>&lt;/e2lanip>
                &lt;e2lanmask><e2:item name="lanMask" filter="xml"/>&lt;/e2lanmask>
-               &lt;e2langw><e2:item name="lanGW" filter="xml"/>&lt;/e2langw>
-<!--           &lt;e2landns><e2:item name="lanDNS" filter="xml"/>&lt;/e2landns> -->
-       
-               &lt;e2model><e2:item name="model" filter="xml"/>&lt;/e2model>
-               &lt;e2fpversion><e2:item name="fpVersion" filter="xml"/>&lt;/e2fpversion>
-               &lt;e2webifversion><e2:item name="WebIfVersion" />&lt;/e2webifversion>
-               &lt;e2tunerinfo><e2:item name="tunerInfo" />&lt;/e2tunerinfo>
-               &lt;e2hddinfo><e2:item name="hddInfo"  />&lt;/e2hddinfo>
-               
-               &lt;e2servicename><e2:item name="serviceName" filter="xml"/>&lt;/e2servicename>
-               &lt;e2serviceprovider><e2:item name="serviceProvider" filter="xml"/>  &lt;/e2serviceprovider>
-               &lt;e2serviceaspect><e2:item name="serviceAspect" filter="xml"/>&lt;/e2serviceaspect>
-               &lt;e2servicevideosize><e2:item name="serviceVideosize" filter="xml"/>&lt;/e2servicevideosize>
-               &lt;e2servicenamespace><e2:item name="serviceNamespace" filter="xml"/>&lt;/e2servicenamespace>
+               &lt;e2langw><e2:item name="lanGW" filter="xml"/>&lt;/e2langw>                                   
+               </e2:convert><e2:convert type="web:TextToHTML" />
+               </e2:element>
                
-               &lt;e2vpid><e2:item name="vPID" filter="xml"/>&lt;/e2vpid>
-               &lt;e2apid><e2:item name="aPID" filter="xml"/>&lt;/e2apid>
-               &lt;e2pcrid><e2:item name="pcrID" filter="xml"/>&lt;/e2pcrid>
-               &lt;e2pmtpid><e2:item name="pmtPID" filter="xml"/>&lt;/e2pmtpid>
-               &lt;e2txtpid><e2:item name="txtPID" filter="xml"/>&lt;/e2txtpid>
-               &lt;e2tsid><e2:item name="tsID" filter="xml"/>&lt;/e2tsid>
-               &lt;e2onid><e2:item name="onID" filter="xml"/>&lt;/e2onid>
-               &lt;e2sid><e2:item name="sid" filter="xml"/>&lt;/e2sid>
-       &lt;/e2about>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2abouts>
+               <e2:element source="Hdd"><e2:convert type="web:ListFiller">
+               &lt;e2hddinfo>
+                       &lt;model><e2:item name="Model" filter="xml"/>&lt;/model>
+                       &lt;capacity><e2:item name="Capacity" filter="xml"/>&lt;/capacity>
+                       &lt;free><e2:item name="Free" filter="xml"/>&lt;/free>
+               &lt;/e2hddinfo>
+               </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>          
+               <e2tunerinfo><e2:element source="Frontends"><e2:convert type="web:ListFiller" >
+                       &lt;e2nim>
+                               &lt;name><e2:item name="Name" filter="xml"/>&lt;/name>
+                               &lt;type><e2:item name="Type" filter="xml"/>&lt;/type>
+                       &lt;/e2nim></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+               </e2tunerinfo>          
+               <e2servicename><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicename>
+               <e2servicenamespace />
+               <e2serviceaspect />
+               <e2serviceprovider><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Provider</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2serviceprovider>
+               <e2videowidth><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoWidth</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2videowidth>
+               <e2videoheight><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoHeight</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2videoheight>
+               <e2servicevideosize><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoWidth</e2:convert><e2:convert type="web:TextToXML" /></e2:element>x<e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoHeight</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicevideosize>
+               <e2apid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">AudioPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2apid>
+               <e2vpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2vpid>
+               <e2pcrpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">PcrPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2pcrpid>
+               <e2pmtpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">PmtPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2pmtpid>
+               <e2txtpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">TxtPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2txtpid>
+               <e2tsid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">TsId</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2tsid>
+               <e2onid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">OnId</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2onid>
+               <e2sid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">Sid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2sid>
+       </e2about>
+</e2abouts>
 </e2:screen>
\ No newline at end of file
diff --git a/webinterface/src/web/about2.xml b/webinterface/src/web/about2.xml
deleted file mode 100644 (file)
index 1fcb9cc..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<e2:screen name="About2">&lt;?xml version="1.0" encoding="UTF-8"?>
-<e2about>
-       <e2frontends><e2:element source="Frontends"><e2:convert type="web:ListFiller" >
-               &lt;e2frontend>
-                       &lt;e2name><e2:item name="Name" filter="xml"/>&lt;/e2name>
-                       &lt;e2type><e2:item name="Type" filter="xml"/>&lt;/e2type>
-               &lt;/e2frontend></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-       </e2frontends>
-       <e2network><e2:element source="Network"><e2:convert type="web:ListFiller" >
-               &lt;e2interface>
-                       &lt;e2name><e2:item name="Name" filter="xml"/>&lt;/e2name>
-                       &lt;e2mac><e2:item name="Mac" filter="xml"/>&lt;/e2mac>
-                       &lt;e2dhcp><e2:item name="Dhcp" filter="xml"/>&lt;/e2dhcp>
-                       &lt;e2ip><e2:item name="Ip" filter="xml"/>&lt;/e2ip>
-                       &lt;e2gateway><e2:item name="Gateway" filter="xml"/>&lt;/e2gateway>
-                       &lt;e2netmask><e2:item name="Netmask" filter="xml"/>&lt;/e2netmask>
-               &lt;/e2interface></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-       </e2network>
-       <e2hdds><e2:element source="Hdd"><e2:convert type="web:ListFiller">
-               &lt;e2hdd>
-                       &lt;e2model><e2:item name="Model" filter="xml"/>&lt;/e2model>
-                       &lt;e2capacity><e2:item name="Capacity" filter="xml"/>&lt;/e2capacity>
-                       &lt;e2free><e2:item name="Free" filter="xml"/>&lt;/e2free>
-               &lt;/e2hdd></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-       </e2hdds>
-       <e2service>     
-               <e2servicename><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicename>
-               <e2providername><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Provider</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2providername>
-               <e2videowidth><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoWidth</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2videowidth>
-               <e2videoheight><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoHeight</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2videoheight>
-       </e2service>
-</e2about>
-</e2:screen>
index d028bfe..3aaca59 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="AutoTimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2autotmerlist><e2:element source="AutoTimerList" id="gl"><e2:convert type="web:ListFiller" >
+<e2autotmerlist><e2:element source="AutoTimerList" id="gl"><e2:convert type="web:ListFiller" >
        &lt;e2autotimer>
                &lt;e2name><e2:item name="Name"  filter="xml"/>&lt;/e2name>
                &lt;e2match><e2:item name="Match"  filter="xml"/>&lt;/e2match>
@@ -31,5 +31,5 @@
        &lt;/e2autotimer>
        </e2:convert>
        <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2autotmerlist>
+</e2autotmerlist>
 </e2:screen>
\ No newline at end of file
diff --git a/webinterface/src/web/delfile.xml b/webinterface/src/web/delfile.xml
deleted file mode 100644 (file)
index 6307550..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<e2:screen name="FilesWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="DelFile" id="file">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
-</e2:screen>
\ No newline at end of file
diff --git a/webinterface/src/web/deviceinfo.xml b/webinterface/src/web/deviceinfo.xml
new file mode 100644 (file)
index 0000000..7855329
--- /dev/null
@@ -0,0 +1,35 @@
+<e2:screen name="DeviceInfo">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2deviceinfo>
+       <e2enigmaversion><e2:element source="EnigmaVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2enigmaversion>
+       <e2imageversion><e2:element source="ImageVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2imageversion>
+       <e2webifversion><e2:element source="WebIfVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2webifversion>
+       <e2fpversion><e2:element source="FpVersion"><e2:convert type="web:TextToHTML" /></e2:element></e2fpversion>
+       <e2devicename><e2:element source="DeviceName"><e2:convert type="web:TextToHTML" /></e2:element></e2devicename>
+       
+       <e2frontends><e2:element source="Frontends"><e2:convert type="web:ListFiller" >
+               &lt;e2frontend>
+                       &lt;e2name><e2:item name="Name" filter="xml"/>&lt;/e2name>
+                       &lt;e2model><e2:item name="Type" filter="xml"/>&lt;/e2model>
+               &lt;/e2frontend></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+       </e2frontends>
+       
+       <e2network><e2:element source="Network"><e2:convert type="web:ListFiller" >
+               &lt;e2interface>
+                       &lt;e2name><e2:item name="Name" filter="xml"/>&lt;/e2name>
+                       &lt;e2mac><e2:item name="Mac" filter="xml"/>&lt;/e2mac>
+                       &lt;e2dhcp><e2:item name="Dhcp" filter="xml"/>&lt;/e2dhcp>
+                       &lt;e2ip><e2:item name="Ip" filter="xml"/>&lt;/e2ip>
+                       &lt;e2gateway><e2:item name="Gateway" filter="xml"/>&lt;/e2gateway>
+                       &lt;e2netmask><e2:item name="Netmask" filter="xml"/>&lt;/e2netmask>
+               &lt;/e2interface></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+       </e2network>
+       
+       <e2hdds><e2:element source="Hdd"><e2:convert type="web:ListFiller">
+               &lt;e2hdd>
+                       &lt;e2model><e2:item name="Model" filter="xml"/>&lt;/e2model>
+                       &lt;e2capacity><e2:item name="Capacity" filter="xml"/>&lt;/e2capacity>
+                       &lt;e2free><e2:item name="Free" filter="xml"/>&lt;/e2free>
+               &lt;/e2hdd></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+       </e2hdds>
+</e2deviceinfo>
+</e2:screen>
index 3859fa5..1a7541f 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGBOUQUET" id="bRef,time"><e2:convert type="web:ListFiller" >
+<e2eventlist><e2:element source="EPGBOUQUET" id="bRef,time"><e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
                &lt;e2eventstart><e2:item name="TimeStart"/>&lt;/e2eventstart>
@@ -10,5 +10,5 @@
                &lt;e2eventservicereference><e2:item name="ServiceReference" filter="xml"/>&lt;/e2eventservicereference>
                &lt;e2eventservicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2eventservicename>
        &lt;/e2event></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index 28f6905..0d7bb1a 100644 (file)
@@ -1,6 +1,6 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGBOUQUETNEXT" id="bRef">
-       <e2:convert type="web:ListFiller" >
+<e2eventlist>
+       <e2:element source="EPGBOUQUETNEXT" id="bRef"><e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
                &lt;e2eventstart><e2:item name="TimeStart"/>&lt;/e2eventstart>
@@ -11,7 +11,6 @@
                &lt;e2eventservicereference><e2:item name="ServiceReference" filter="xml"/>&lt;/e2eventservicereference>
                &lt;e2eventservicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2eventservicename>
        &lt;/e2event>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index 12771a2..ed2d38f 100644 (file)
@@ -1,6 +1,6 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGBOUQUETNOW" id="bRef">
-       <e2:convert type="web:ListFiller" >
+<e2eventlist>
+       <e2:element source="EPGBOUQUETNOW" id="bRef"><e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
                &lt;e2eventstart><e2:item name="TimeStart"/>&lt;/e2eventstart>
@@ -11,7 +11,6 @@
                &lt;e2eventservicereference><e2:item name="ServiceReference" filter="xml"/>&lt;/e2eventservicereference>
                &lt;e2eventservicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2eventservicename>
        &lt;/e2event>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index 28bb60e..8e2396f 100644 (file)
@@ -1,10 +1,10 @@
-<e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-       &lt;channel>
-               &lt;title>EPG Suche&lt;/title>
-               &lt;description>Eine automatische Suche nach EPG-Titeln&lt;/description>
-               &lt;generator>Enigma2 WebInterface&lt;/generator>
-               
+<e2:screen name="EPGWebScreen"><e2:element source="localip" macro="ipadress" />&lt;?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0">
+       <channel>
+               <title>EPG Suche</title>
+               <link>http://<e2:element source="localip" filter="xml" /></link>
+               <description>Eine automatische Suche nach EPG-Titeln</description>
+               <generator>Enigma2 WebInterface</generator>             
                <e2:element source="EPGTITLE" id="search"><e2:convert type="web:ListFiller" >
                &lt;item>
                        &lt;title><e2:item name="Title" filter="xml"/>&lt;/title>
@@ -20,6 +20,6 @@
                </e2:convert>
                <e2:convert type="web:TextToHTML" />
                </e2:element>
-       &lt;/channel>
-&lt;/rss>
+       </channel>
+</rss>
 </e2:screen>
\ No newline at end of file
index 89f62c0..7a455e3 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGTITLE" id="search"><e2:convert type="web:ListFiller" >
+<e2eventlist><e2:element source="EPGTITLE" id="search"><e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
                &lt;e2eventstart><e2:item name="TimeStart"/>&lt;/e2eventstart>
@@ -10,5 +10,5 @@
                &lt;e2eventservicereference><e2:item name="ServiceReference" filter="xml"/>&lt;/e2eventservicereference>
                &lt;e2eventservicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2eventservicename>
        &lt;/e2event></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index f4506ac..550d609 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGSERVICE" id="sRef"><e2:convert type="web:ListFiller" >
+<e2eventlist><e2:element source="EPGSERVICE" id="sRef"><e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
                &lt;e2eventstart><e2:item name="TimeStart"/>&lt;/e2eventstart>
@@ -10,5 +10,5 @@
                &lt;e2eventservicereference><e2:item name="ServiceReference" filter="xml"/>&lt;/e2eventservicereference>
                &lt;e2eventservicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2eventservicename>
        &lt;/e2event></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index acd030e..f7f0af7 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGSERVICENEXT" id="sRef">
+<e2eventlist><e2:element source="EPGSERVICENEXT" id="sRef">
        <e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
@@ -13,5 +13,5 @@
        &lt;/e2event>
        </e2:convert>
        <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index 40f4afb..04bebab 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="EPGWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2eventlist><e2:element source="EPGSERVICENOW" id="sRef">
+<e2eventlist><e2:element source="EPGSERVICENOW" id="sRef">
        <e2:convert type="web:ListFiller" >
        &lt;e2event>
                &lt;e2eventid><e2:item name="EventID"/>&lt;/e2eventid>
@@ -13,5 +13,5 @@
        &lt;/e2event>
        </e2:convert>
        <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2eventlist>
+</e2eventlist>
 </e2:screen>
\ No newline at end of file
index 276750d..9c3da22 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="AudioWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2audiotracklist><e2:element source="AudioTracks">
+<e2audiotracklist><e2:element source="AudioTracks">
        <e2:convert type="web:ListFiller" >
                &lt;e2audiotrack>
                        &lt;e2audiotrackdescription><e2:item name="Description" filter="xml"/>&lt;/e2audiotrackdescription>
@@ -9,5 +9,5 @@
                &lt;/e2audiotrack>
        </e2:convert>
 <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2audiotracklist>
+</e2audiotracklist>
 </e2:screen>
\ No newline at end of file
index 8a429a3..8b24461 100644 (file)
@@ -1,28 +1,39 @@
 <e2:screen name="UpdateWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
 <e2currentserviceinformation>                                                                                                                                                                                                                                          
-<e2service>
-       <e2servicereference><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Reference</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicereference>
-       <e2servicename><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicename>
-       <e2providername><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Provider</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2providername>
-</e2service>
-
-<e2eventlist>
-       <e2event>
-               <e2eventid><e2:element source="session.Event_Now"><e2:convert type="EventName">ID</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventid>      
-               <e2eventname><e2:element source="session.Event_Now"><e2:convert type="EventName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventname>
-               <e2eventdescription><e2:element source="session.Event_Now"><e2:convert type="EventName">Description</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescription>
-               <e2eventdescriptionextended><e2:element source="session.Event_Now"><e2:convert type="EventName">ExtendedDescription</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescriptionextended>
-               <e2eventstart><e2:element source="session.Event_Now"><e2:convert type="EventTime">StartTime</e2:convert><e2:convert type="ClockToText">Default</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventstart>
-               <e2eventduration><e2:element source="session.Event_Now"><e2:convert type="EventTime">Remaining</e2:convert><e2:convert type="RemainingToText">InMinutes</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventduration>
-       </e2event>
-       <e2event>
-               <e2eventid><e2:element source="session.Event_Next"><e2:convert type="EventName">ID</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventid>
-               <e2eventname><e2:element source="session.Event_Next"><e2:convert type="EventName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventname>
-               <e2eventdescription><e2:element source="session.Event_Next"><e2:convert type="EventName">Description</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescription>
-               <e2eventstart><e2:element source="session.Event_Next"><e2:convert type="EventTime">StartTime</e2:convert><e2:convert type="ClockToText">Default</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventstart>
-               <e2eventduration><e2:element source="session.Event_Next"><e2:convert type="EventTime">Remaining</e2:convert><e2:convert type="RemainingToText">InMinutes</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventduration>
-               <e2eventdescriptionextended><e2:element source="session.Event_Next"><e2:convert type="EventName">ExtendedDescription</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescriptionextended>
-       </e2event>
-</e2eventlist>
+       <e2service>
+               <e2servicereference><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Reference</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicereference>
+               <e2servicename><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicename>
+               <e2providername><e2:element source="session.CurrentService"><e2:convert type="ServiceName">Provider</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2providername>
+               <e2videowidth><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoWidth</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2videowidth>
+               <e2videoheight><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoHeight</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2videoheight>
+               <e2servicevideosize><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoWidth</e2:convert><e2:convert type="web:TextToXML" /></e2:element>x<e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoHeight</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2servicevideosize>
+               <e2iswidescreen><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">IsWidescreen</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2iswidescreen>
+               <e2apid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">AudioPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2apid>
+               <e2vpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">VideoPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2vpid>
+               <e2pcrpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">PcrPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2pcrpid>
+               <e2pmtpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">PmtPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2pmtpid>
+               <e2txtpid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">TxtPid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2txtpid>
+               <e2tsid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">TsId</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2tsid>
+               <e2onid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">OnId</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2onid>
+               <e2sid><e2:element source="session.CurrentService"><e2:convert type="ServiceInfo">Sid</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2sid>              
+       </e2service>
+       <e2eventlist>
+               <e2event>
+                       <e2eventid><e2:element source="session.Event_Now"><e2:convert type="EventName">ID</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventid>      
+                       <e2eventname><e2:element source="session.Event_Now"><e2:convert type="EventName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventname>
+                       <e2eventdescription><e2:element source="session.Event_Now"><e2:convert type="EventName">Description</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescription>
+                       <e2eventdescriptionextended><e2:element source="session.Event_Now"><e2:convert type="EventName">ExtendedDescription</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescriptionextended>
+                       <e2eventstart><e2:element source="session.Event_Now"><e2:convert type="EventTime">StartTime</e2:convert><e2:convert type="ClockToText">Timestamp</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventstart>
+                       <e2eventduration><e2:element source="session.Event_Now"><e2:convert type="EventTime">Remaining</e2:convert><e2:convert type="RemainingToText">InSeconds</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventduration>
+               </e2event>
+               <e2event>
+                       <e2eventid><e2:element source="session.Event_Next"><e2:convert type="EventName">ID</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventid>
+                       <e2eventname><e2:element source="session.Event_Next"><e2:convert type="EventName">Name</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventname>
+                       <e2eventdescription><e2:element source="session.Event_Next"><e2:convert type="EventName">Description</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescription>
+                       <e2eventstart><e2:element source="session.Event_Next"><e2:convert type="EventTime">StartTime</e2:convert><e2:convert type="ClockToText">Timestamp</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventstart>
+                       <e2eventduration><e2:element source="session.Event_Next"><e2:convert type="EventTime">Remaining</e2:convert><e2:convert type="RemainingToText">InSeconds</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventduration>
+                       <e2eventdescriptionextended><e2:element source="session.Event_Next"><e2:convert type="EventName">ExtendedDescription</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2eventdescriptionextended>
+               </e2event>
+       </e2eventlist>
 </e2currentserviceinformation>
 </e2:screen>
\ No newline at end of file
index 04fad54..f80aa48 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="LocationsAndTagsWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="CurrentLocation">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2locations>
+       <e2location><e2:element source="CurrentLocation"><e2:convert type="web:TextToHTML" /></e2:element></e2location>
+</e2locations>
 </e2:screen>
\ No newline at end of file
index 2402d13..5b97302 100644 (file)
@@ -1,5 +1,8 @@
 <e2:screen name="LocationsAndTagsWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="Locations">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2locations>
+<e2:element source="Locations"><e2:convert type="web:SimpleListFiller">
+       &lt;e2location><e2:item name="" filter="xml" />&lt;/e2location>
+       </e2:convert><e2:convert type="web:TextToHTML" />       
+</e2:element>
+</e2locations>
 </e2:screen>
\ No newline at end of file
index 6762923..87d57fc 100644 (file)
@@ -1,5 +1,8 @@
 <e2:screen name="LocationsAndTagsWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="Tags">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2tags>
+<e2:element source="Tags"><e2:convert type="web:SimpleListFiller">
+       &lt;e2tag><e2:item name="" filter="xml" />&lt;/e2tag>
+</e2:convert><e2:convert type="web:TextToHTML" />      
+</e2:element>
+</e2tags>
 </e2:screen>
\ No newline at end of file
index 2434da6..c4d2ec4 100644 (file)
@@ -1,11 +1,10 @@
 <e2:screen name="MediaPlayerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2filelist><e2:element source="FileList" id="path,types"><e2:convert type="web:ListFiller" >
+<e2filelist><e2:element source="FileList" id="path,types"><e2:convert type="web:ListFiller" >
        &lt;e2file>
                &lt;e2servicereference><e2:item name="ServiceReference"  filter="xml"/>&lt;/e2servicereference>
                &lt;e2isdirectory><e2:item name="IsDirectory"  filter="xml"/>&lt;/e2isdirectory>
            &lt;e2root><e2:item name="Root"  filter="xml"/>&lt;/e2root>
        &lt;/e2file>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2filelist>
+       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</e2filelist>
 </e2:screen>
\ No newline at end of file
index 818af57..82f5148 100644 (file)
@@ -1,8 +1,7 @@
 <e2:screen name="MessageWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2simplexmlresult>
-       <e2:element source="Message" id="text,type,timeout"><e2:convert type="web:ListFiller" >
-       &lt;e2state><e2:item name="Result" filter="xml"/>&lt;/e2state>
-       &lt;e2statetext><e2:item name="ResultText" filter="xml"/>&lt;/e2statetext>>
-       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2simplexmlresult>
+<e2:element source="Message" id="text,type,timeout"><e2:convert type="web:Null" /></e2:element>
+<e2simplexmlresult>    
+       <e2state><e2:element source="Message"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="Message"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>        
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index 627c076..9aee739 100644 (file)
@@ -1,8 +1,7 @@
 <e2:screen name="MessageWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2simplexmlresult>
-       <e2:element source="GetAnswer" id="getanswer"><e2:convert type="web:ListFiller" >
-       &lt;e2state><e2:item name="Result" filter="xml"/>&lt;/e2state>
-       &lt;e2statetext><e2:item name="ResultText" filter="xml"/>&lt;/e2statetext>
-       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2simplexmlresult>
+<e2:element source="GetAnswer" id="getanswer"><e2:convert type="web:Null" /></e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="GetAnswer"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="GetAnswer"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index eddfbfd..79898a6 100644 (file)
@@ -1,5 +1,7 @@
 <e2:screen name="MovieWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="MovieFileDel" id="sRef">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="MovieFileDel" id="sRef"><e2:convert type="web:Null" /></e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="MovieFileDel"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="MovieFileDel"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index fc15a5b..2466f80 100644 (file)
@@ -1,14 +1,11 @@
 <e2:screen name="MovieWebScreen">
-&lt;html>
-       &lt;head>
-               &lt;title>Enigma2 Movielist&lt;/title>
-               &lt;link href="/webdata/style.css" type="text/css" rel="stylesheet" />
-       
-       &lt;/head>
-       
-&lt;body>
-
-&lt;table width='100%'>
+<html>
+       <head>
+               <title>Enigma2 Movielist</title>
+               <link href="/webdata/style.css" type="text/css" rel="stylesheet" />     
+       </head>
+<body>
+       <table width="100%">
                <e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
                &lt;tr>
                        &lt;td class="pageHeader"><e2:item name="Title" filter="xml"/>&lt;/td>
@@ -28,8 +25,8 @@
                &lt;/tr>
                                
                </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/table>
+       </table>
 
-&lt;/body>
-&lt;/html>
+</body>
+</html>
 </e2:screen>
index 4511844..077618d 100644 (file)
@@ -1,10 +1,10 @@
 <e2:screen name="MovieWebScreen"><e2:element source="localip" macro="ipadress" />&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;rss version="2.0" >
-       &lt;channel>
-               &lt;title>Enigma2 Movielist&lt;/title>
-               &lt;link>http://<e2:element source="localip" filter="xml" />&lt;/link>
-               &lt;description>Eine automatische Liste aller Enigma2 Aufnahmen&lt;/description>
-               &lt;generator>Enigma2 WebInterface &lt;/generator>
+<rss version="2.0" >
+       <channel>
+               <title>Enigma2 Movielist</title>
+               <link>http://<e2:element source="localip" filter="xml" /></link>
+               <description>Eine automatische Liste aller Enigma2 Aufnahmen</description>
+               <generator>Enigma2 WebInterface</generator>
                <e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
                &lt;item>
                        &lt;title><e2:item name="Title" filter="xml"/>&lt;/title>
@@ -21,6 +21,6 @@
                        &lt;category><e2:item name="ServiceName" filter="xml" />&lt;/category>
                        &lt;author>Dreambox Enigma2&lt;/author>
                &lt;/item></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-       &lt;/channel>
-&lt;/rss>
+       </channel>
+</rss>
 </e2:screen>
\ No newline at end of file
index 0969ec4..24734f3 100644 (file)
@@ -1,18 +1,18 @@
 <e2:screen name="MovieWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2movielist><e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
+<e2movielist><e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
        &lt;e2movie>
-               &lt;e2servicereference><e2:item name="ServiceReference"  filter="xml"/>&lt;/e2servicereference>
-               &lt;e2title><e2:item name="Title"  filter="xml"/>&lt;/e2title>
-               &lt;e2description><e2:item name="Description"  filter="xml"/>&lt;/e2description>
+               &lt;e2servicereference><e2:item name="ServiceReference" filter="xml"/>&lt;/e2servicereference>
+               &lt;e2title><e2:item name="Title" filter="xml"/>&lt;/e2title>
+               &lt;e2description><e2:item name="Description" filter="xml"/>&lt;/e2description>
                &lt;e2descriptionextended><e2:item name="DescriptionExtended" filter="xml"/>&lt;/e2descriptionextended>
-               &lt;e2servicename><e2:item name="ServiceName"  filter="xml"/>&lt;/e2servicename>
-               &lt;e2time><e2:item name="Time"  filter="xml"/>&lt;/e2time>
-               &lt;e2length><e2:item name="Length"  filter="xml"/>&lt;/e2length>
-               &lt;e2tags><e2:item name="Tags"  filter="xml"/>&lt;/e2tags>
-               &lt;e2filename><e2:item name="Filename"  filter="xml"/>&lt;/e2filename>
-               &lt;e2filesize><e2:item name="Filesize"  filter="xml"/>&lt;/e2filesize>
+               &lt;e2servicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2servicename>
+               &lt;e2time><e2:item name="Time" filter="xml"/>&lt;/e2time>
+               &lt;e2length><e2:item name="Length" filter="xml"/>&lt;/e2length>
+               &lt;e2tags><e2:item name="Tags" filter="xml"/>&lt;/e2tags>
+               &lt;e2filename><e2:item name="Filename" filter="xml"/>&lt;/e2filename>
+               &lt;e2filesize><e2:item name="Filesize" filter="xml"/>&lt;/e2filesize>
        &lt;/e2movie>
        </e2:convert>
        <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2movielist>
+</e2movielist>
 </e2:screen>
\ No newline at end of file
index a96b358..87d57fc 100755 (executable)
@@ -1,5 +1,8 @@
-<e2:screen name="MovieWebScreen">
-       <e2:element source="MovieTags" >
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:screen name="LocationsAndTagsWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2tags>
+<e2:element source="Tags"><e2:convert type="web:SimpleListFiller">
+       &lt;e2tag><e2:item name="" filter="xml" />&lt;/e2tag>
+</e2:convert><e2:convert type="web:TextToHTML" />      
+</e2:element>
+</e2tags>
 </e2:screen>
\ No newline at end of file
index c43bc0a..cd16586 100644 (file)
@@ -1,7 +1,7 @@
 <e2:screen name="PowerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2powerstate>
-       &lt;e2instandby><e2:element source="PowerState" id="newstate">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>&lt;/e2instandby>
-&lt;/e2powerstate>
+<e2powerstate>
+       <e2instandby><e2:element source="PowerState" id="newstate">
+               <e2:convert type="web:TextToHTML" /></e2:element>
+       </e2instandby>
+</e2powerstate>
 </e2:screen>
\ No newline at end of file
index d1bd31e..29ea15e 100644 (file)
@@ -1,8 +1,7 @@
 <e2:screen name="RemoteWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2remotecontrol>
-       <e2:element source="RemoteControl" id="command"><e2:convert type="web:ListFiller" >
-       &lt;e2result><e2:item name="Result" filter="xml"/>&lt;/e2result>
-       &lt;e2resulttext><e2:item name="ResultText" filter="xml"/>&lt;/e2resulttext>
-       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2remotecontrol>
+<e2:element source="RemoteControl" id="command"><e2:convert type="web:Null" /></e2:element>
+<e2remotecontrol>
+       <e2result><e2:element source="RemoteControl"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2result>
+       <e2resulttext><e2:element source="RemoteControl"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2resulttext>
+</e2remotecontrol>
 </e2:screen>
\ No newline at end of file
index 712f74d..14e4534 100644 (file)
@@ -1,3 +1,3 @@
 <e2:screen name="AudioWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2result><e2:element source="SelectAudioTrack" id="id"><e2:convert type="web:TextToHTML" /></e2:element>&lt;/e2result>
+<e2result><e2:element source="SelectAudioTrack" id="id"><e2:convert type="web:TextToHTML" /></e2:element></e2result>
 </e2:screen>
index 73f9d2c..36f5709 100644 (file)
@@ -1,8 +1,7 @@
 <e2:screen name="ServiceListReloadWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2message>
-       <e2:element source="ServiceListReload" id="mode"><e2:convert type="web:ListFiller" >
-       &lt;e2result><e2:item name="result" filter="xml"/>&lt;/e2result>
-       &lt;e2resulttext><e2:item name="mode" filter="xml"/>&lt;/e2resulttext>
-       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2message>
+<e2:element source="ServiceListReload" id="mode"><e2:convert type="web:Null" /></e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="ServiceListReload"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="ServiceListReload"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>      
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index d1f7a07..57b2d97 100644 (file)
@@ -3,8 +3,8 @@
 <e2:element source="Settings">                         
        <e2:convert type="web:ListFiller">
        &lt;e2setting>
-               &lt;e2settingvalue><e2:item name="Value" filter="xml" />&lt;/e2settingvalue>
                &lt;e2settingname><e2:item name="Name" filter="xml" />&lt;/e2settingname>
+               &lt;e2settingvalue><e2:item name="Value" filter="xml" />&lt;/e2settingvalue>            
        &lt;/e2setting>
        </e2:convert>
        <e2:convert type="web:TextToHTML" />                    
index 6bc2d30..8b7dd78 100644 (file)
@@ -1,10 +1,10 @@
 <e2:screen name="SubServiceWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2servicelist><e2:element source="SubServices" ><e2:convert type="web:ListFiller" >
+<e2servicelist><e2:element source="SubServices" ><e2:convert type="web:ListFiller" >
        &lt;e2service>
                &lt;e2servicereference><e2:item name="ServiceReference"  filter="xml"/>&lt;/e2servicereference>
                &lt;e2servicename><e2:item name="Name"  filter="xml"/>&lt;/e2servicename>
        &lt;/e2service>
        </e2:convert>
        <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2servicelist>
+</e2servicelist>
 </e2:screen>
\ No newline at end of file
index c3761e7..cf06f98 100644 (file)
@@ -1,5 +1,9 @@
 <e2:screen name="TimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="TimerAdd" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="TimerAdd" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent">
+       <e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="TimerAdd"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TimerAdd"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>       
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index 503d5af..ddfe91d 100644 (file)
@@ -1,5 +1,9 @@
 <e2:screen name="TimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="TimerAddEventID" id="sRef,eventid,justplay,dirname,tags">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="TimerAddEventID" id="sRef,eventid,justplay,dirname,tags">
+       <e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="TimerAddEventID"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TimerAddEventID"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>        
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index 5f61f42..f0904fd 100644 (file)
@@ -1,5 +1,9 @@
 <e2:screen name="TimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="TimerChange" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent,repeated,channelOld,beginOld,endOld,deleteOldOnSave">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="TimerChange" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent,repeated,channelOld,beginOld,endOld,deleteOldOnSave">
+       <e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="TimerChange"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TimerChange"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>    
+</e2simplexmlresult>   
 </e2:screen>
\ No newline at end of file
index ea77a75..5a85025 100644 (file)
@@ -1,5 +1,9 @@
 <e2:screen name="TimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="TimerCleanup" id="cleanup">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="TimerCleanup" id="cleanup">
+       <e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="TimerCleanup"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TimerCleanup"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>   
+</e2simplexmlresult>           
 </e2:screen>
\ No newline at end of file
index 4beaec1..c377e90 100644 (file)
@@ -1,5 +1,9 @@
 <e2:screen name="TimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-       <e2:element source="TimerDel" id="sRef,begin,end">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="TimerDel" id="sRef,begin,end">
+       <e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="TimerDel"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TimerDel"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>       
+</e2simplexmlresult>
 </e2:screen>
\ No newline at end of file
index 2a89d21..afda7a5 100644 (file)
@@ -1,5 +1,5 @@
 <e2:screen name="TimerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2timerlist><e2:element source="TimerList" ><e2:convert type="web:ListFiller" >
+<e2timerlist><e2:element source="TimerList" ><e2:convert type="web:ListFiller" >
        &lt;e2timer>
                &lt;e2servicereference><e2:item name="ServiceReference" />&lt;/e2servicereference>
                &lt;e2servicename><e2:item name="ServiceName" filter="xml"/>&lt;/e2servicename>
@@ -14,7 +14,7 @@
                &lt;e2startprepare><e2:item name="startPrepare" />&lt;/e2startprepare>
                &lt;e2justplay><e2:item name="justPlay" />&lt;/e2justplay>
                &lt;e2afterevent><e2:item name="afterEvent" />&lt;/e2afterevent>
-               &lt;e2dirname><e2:item name="Location" />&lt;/e2dirname>
+               &lt;e2location><e2:item name="Location" />&lt;/e2location>
                &lt;e2tags><e2:item name="Tags" filter="xml"/>&lt;/e2tags>
                &lt;e2logentries><e2:item name="LogEntries" filter="xml"/>&lt;/e2logentries>
                &lt;e2filename><e2:item name="Filename" filter="xml"/>&lt;/e2filename>
@@ -27,8 +27,6 @@
                &lt;e2cancled><e2:item name="Cancled" />&lt;/e2cancled>
                &lt;e2toggledisabled><e2:item name="toggleDisabled" />&lt;/e2toggledisabled>
                &lt;e2toggledisabledimg><e2:item name="toggleDisabledIMG" />&lt;/e2toggledisabledimg>
-       &lt;/e2timer>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2timerlist>
+       &lt;/e2timer></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</e2timerlist>
 </e2:screen>
\ No newline at end of file
index 85c2eb0..b0da702 100644 (file)
@@ -1,5 +1,9 @@
 <e2:screen name="TimerWebScreen">
-       <e2:element source="TimerListWrite" id="write">
-               <e2:convert type="web:TextToHTML" />
-       </e2:element>
+<e2:element source="TimerListWrite" id="write">
+       <e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+       <e2state><e2:element source="TimerListWrite"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TimerListWrite"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext> 
+</e2simplexmlresult>   
 </e2:screen>
\ No newline at end of file
index ce7ebba..85fdf16 100644 (file)
@@ -1,10 +1,9 @@
 <e2:screen name="VolumeWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2volume><e2:element source="Volume" id="set"><e2:convert type="web:ListFiller" >
-               &lt;e2result><e2:item name="Result"/>&lt;/e2result>
-               &lt;e2resulttext><e2:item name="ResultText"/>&lt;/e2resulttext>
-               &lt;e2current><e2:item name="Volume"/>&lt;/e2current>
-               &lt;e2ismuted><e2:item name="isMuted"/>&lt;/e2ismuted>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2volume>
-</e2:screen>
+<e2:element source="Volume" id="set"><e2:convert type="web:Null" /></e2:element>
+<e2volume>
+       <e2result><e2:element source="Volume"><e2:convert type="VolumeInfo">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2result>
+       <e2resulttext><e2:element source="Volume"><e2:convert type="VolumeInfo">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2resulttext>
+       <e2current><e2:element source="Volume"><e2:convert type="VolumeInfo">Volume</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2current>
+       <e2ismuted><e2:element source="Volume"><e2:convert type="VolumeInfo">IsMuted</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2ismuted>
+</e2volume>
+</e2:screen>
\ No newline at end of file
diff --git a/webinterface/src/web/wap/bouquets.html.xml b/webinterface/src/web/wap/bouquets.html.xml
new file mode 100644 (file)
index 0000000..f648b51
--- /dev/null
@@ -0,0 +1,29 @@
+<e2:screen name="ServiceWebScreen">&lt;html>
+<head>
+  <link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+
+<p>Enigma2 WAP - Bouquets</p>
+<table border="1" cellspacing="0" cellpadding="0">
+       <tr>
+               <td><b>Bouquet</b></td>
+               <td><b>Channellist</b></td>
+       </tr>
+       <e2:element source="ServiceList" id="sRef"><e2:convert type="web:ListFiller" >
+       &lt;tr>
+               &lt;td><e2:item name="Name" filter="xml"/>&lt;/td>
+               &lt;td>
+                       &lt;a href='/web/wap/services.html?sRef=<e2:item name="Reference" filter="uri"/>'>
+                               &lt;img src="/web-data/img/epg.png" title="Channellist" border="0">
+                       &lt;/a>
+               &lt;/td> 
+       &lt;/tr>
+       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</table>
+
+
+</body>
+</e2:screen>
+
+
diff --git a/webinterface/src/web/wap/epg.html.xml b/webinterface/src/web/wap/epg.html.xml
new file mode 100644 (file)
index 0000000..0dad815
--- /dev/null
@@ -0,0 +1,32 @@
+<e2:screen name="EPGWebScreen">&lt;html>
+<head>
+  <link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<p>Enigma2 WAP - EPG</p>
+<table border="1" cellspacing="0" cellpadding="0">
+       <tr>
+               <td><b>Channel</b></td>
+               <td><b>Name</b></td>
+               <td><b>Description</b></td>
+               <td><b>Starttime</b></td>
+               <td><b>Endtime</b></td>
+               <td><b>Duration</b></td>
+               <td><b>Timer</b></td>
+       </tr>
+       <e2:element source="EPGSERVICEWAP" id="sRef"><e2:convert type="web:ListFiller" >
+       &lt;tr>
+               &lt;td><e2:item name="ServiceName" filter="xml"/>&lt;/td>
+               &lt;td><e2:item name="Title" filter="xml"/>&lt;p><e2:item name="Description" filter="xml"/>&lt;/td>   
+               &lt;td><e2:item name="DescriptionExtended" filter="xml"/>&lt;/td>
+               &lt;td><e2:item name="TimeStart" filter="time"/>&lt;/td>
+               &lt;td><e2:item name="TimeEnd" filter="time"/>&lt;/td>
+               &lt;td><e2:item name="Duration" filter="minutes"/>&lt;/td>
+               &lt;td>
+                       &lt;a href=&quot;/web/wap/timeredit.html?bouquet=&amp;sRef=<e2:item name="ServiceReference"/>&amp;begin=<e2:item name="TimeStart"/>&amp;end=<e2:item name="TimeEnd"/>&amp;name=<e2:item name="Title"/>&amp;description=<e2:item name="Description"/>&amp;afterevent=&amp;justplay=&amp;dirname=&amp;tags=&amp;repeated=&amp;disabled=&amp;deleteOldOnSave=0&amp;command=add&amp;ehour=end&amp;emin=end&amp;day=begin&amp;month=begin&amp;year=begin&amp;shour=begin&amp;smin=begin&quot;>&lt;img src=/web-data/img/timer.png title=AddTimer border=0 />&lt;/a>
+               &lt;/td>
+       &lt;/tr>
+       </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</table>
+</body>
+</e2:screen>
index 00960b3..bd843e9 100755 (executable)
@@ -6,18 +6,22 @@
 
        <link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet" />
        <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"/>
+
 </head>
 <body>
-<h1 style="text-align: center;"><big>Dreambox 7025</big></h1>
+
+<h1 style="text-align: center;"><big>Enigma 2</big></h1>
 <h1 style="text-align: center;">Static/WAP</h1>
 <h1 style="text-align: center;"><small>Interface</small></h1>
 <br/>
-<div style="text-align: center;">
+<div class="wap" style="text-align: center;">
 <a href="/web/wap/wapremote.html?command=0">Remote Control</a><br/>
 <a href="/web/wap/timerlist.html">Timerlist</a><br/>
 <a href="/web/wap/timeredit.html?name=&amp;description=&amp;dirname=&amp;tags=&amp;justplay=&amp;afterevent=&amp;repeated=&amp;bouquet=&amp;sRef=&amp;ehour=now&amp;shour=now&amp;emin=now&amp;smin=now&amp;day=now&amp;month=now&amp;year=now&amp;end=&amp;begin=&amp;deleteOldOnSave=0&amp;command=add">Add Timer</a><br/>
+<a href="/web/wap/services.html?sRef=1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.0.tv%22%20ORDER%20BY%20bouquet">Channellist Favorites</a><br/>
+<a href="/web/wap/bouquets.html?sRef=1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A(type%20%3D%3D%201)%20||%20(type%20%3D%3D%2017)%20||%20(type%20%3D%3D%20195)%20||%20(type%20%3D%3D%2025)FROM%20BOUQUET%20%22bouquets.tv%22%20ORDER%20BY%20bouquet">Bouquetlist</a><br/>
 <a href="/web/wap/power.html">PowerState</a><br/>
 </div>
 </body>
 </html>
-</e2:screen>
\ No newline at end of file
+</e2:screen>
index a13f88e..688cb44 100644 (file)
@@ -8,10 +8,12 @@
        <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"/>
 </head>
 <body>
-<p><center><a href="/web/powerstate?newstate=1">deepstandby Dreambox</a></center></p>
-<p><center><a href="/web/powerstate?newstate=2">reboot Dreambox</a></center></p>
-<hr/>
-<p><center><a href="/web/powerstate?newstate=3">restart Enigma2</a></center></p>
+<div class="wap">
+       <p><center><a href="/web/powerstate?newstate=1">Deepstandby Dreambox</a></center></p>
+       <p><center><a href="/web/powerstate?newstate=2">Reboot Dreambox</a></center></p>
+       <hr/>
+       <p><center><a href="/web/powerstate?newstate=3">Restart Enigma2</a></center></p>
+</div>
 </body>
 </html>
 </e2:screen>
\ No newline at end of file
diff --git a/webinterface/src/web/wap/services.html.xml b/webinterface/src/web/wap/services.html.xml
new file mode 100644 (file)
index 0000000..cb5a105
--- /dev/null
@@ -0,0 +1,24 @@
+<e2:screen name="ServiceWebScreen">&lt;html>
+<head>
+  <link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+Enigma2 Servicelist - Favorites
+<table border="1" cellpadding="0" cellspacing="0">
+       <tr>
+               <td><b>Channel</b></td>
+               <td><b>ZAP</b></td>
+               <td><b>EPG</b></td>
+       </tr>
+<e2:element source="ServiceList" id="sRef"><e2:convert type="web:ListFiller" >
+        &lt;tr>
+        &lt;td><e2:item name="Name" filter="xml"/>&lt;/td>
+        &lt;td>&lt;a href=&quot;/web/zap?sRef=<e2:item name="Reference" filter="uri"/>&quot;>&lt;img src=/web-data/img/zap.png title=ZAP border=0>&lt;/a>&lt;/td>
+        &lt;td>&lt;a href=&quot;/web/wap/epg.html?sRef=<e2:item name="Reference" filter="uri"/>&quot;>&lt;img src=/web-data/img/epg.png title=EPG border=0>&lt;/a>&lt;/td>
+        &lt;/tr>
+        </e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</table>
+
+
+</body>
+</e2:screen>
index cbbef30..503078c 100644 (file)
@@ -1,5 +1,10 @@
 <e2:screen name="TimerWebScreen">
        <e2:element source="TVBrowser" id="sRef,name,description,dirname,tags,eit,disabled,justplay,afterevent,year,month,day,shour,smin,ehour,emin,mo,tu,we,th,fr,sa,su,mf,ms,command,deleteOldOnSave,beginOld,endOld,channelOld">
-               <e2:convert type="web:TextToHTML" />
+               <e2:convert type="web:Null" />
        </e2:element>
+       
+<e2simplexmlresult>
+       <e2state><e2:element source="TVBrowser"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2state>
+       <e2statetext><e2:element source="TVBrowser"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToHTML" /></e2:element></e2statetext>      
+</e2simplexmlresult>   
 </e2:screen>
\ No newline at end of file
index a582748..6fa1e5e 100644 (file)
@@ -1,14 +1,14 @@
-<e2:screen name="TimerWebScreen">&lt;html>
-&lt;head>
-       &lt;meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
-       &lt;title>Enigma 2 Webinterface (ALPHA)&lt;/title>
-       &lt;meta http-equiv="refresh" content="1; URL=/web/wap/timerlist.html">
-       &lt;link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"/>
-&lt;/head>
-&lt;body>
-&lt;p>&lt;center>You will be redirected in a second&lt;/center>&lt;/p>
-&lt;/body>
-&lt;/html>
+<e2:screen name="TimerWebScreen"><html>
+<head>
+       <meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
+       <title>Enigma 2 Webinterface (ALPHA)</title>
+       <meta http-equiv="refresh" content="1; URL=/web/wap/timerlist.html"/>
+       <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"/>
+</head>
+<body>
+<p><center>You will be redirected in a second</center></p>
+</body>
+</html>
 <e2:element source="TimerChange" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent,repeated,channelOld,beginOld,endOld,deleteOldOnSave">
                <e2:convert type="web:TextToHTML" />
        </e2:element>
index 42739e6..2fb839d 100644 (file)
@@ -1,14 +1,14 @@
-<e2:screen name="TimerWebScreen">&lt;html>
-&lt;head>
-       &lt;meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
-       &lt;title>Enigma 2 Webinterface (ALPHA)&lt;/title>
-       &lt;meta http-equiv="refresh" content="1; URL=/web/wap/timerlist.html">
-       &lt;link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"/>
-&lt;/head>
-&lt;body>
-&lt;p>&lt;center>You will be redirected in a second&lt;/center>&lt;/p>
-&lt;/body>
-&lt;/html>
+<e2:screen name="TimerWebScreen"><html>
+<head>
+       <meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
+       <title>Enigma 2 Webinterface (ALPHA)</title>
+       <meta http-equiv="refresh" content="1; URL=/web/wap/timerlist.html"/>
+       <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"/>
+</head>
+<body>
+<p><center>You will be redirected in a second</center></p>
+</body>
+</html>
        <e2:element source="TimerDel" id="sRef,begin,end">
                <e2:convert type="web:TextToHTML" />
        </e2:element>
index c357a61..f948143 100755 (executable)
@@ -1,26 +1,26 @@
-<e2:screen name="TimerWebScreen">&lt;html>
-&lt;head>
+<e2:screen name="TimerWebScreen"><html>
+<head>
 <!--
 Version = '$Header$';
 -->
-       &lt;meta content="text/html; charset=UTF-8" http-equiv="content-type">
-       &lt;title>Enigma 2 Webinterface (ALPHA)&lt;/title>
+       <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+       <title>Enigma 2 Webinterface (ALPHA)</title>
 
-       &lt;link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet" >
-       &lt;link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico">
-&lt;/head>
+       <link href="/web-data/tpl/default/style.css" type="text/css" rel="stylesheet" />
+       <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico" />
+</head>
 
-&lt;body>
-&lt;div style="text-align: center;">
-&lt;table border="1">
-               &lt;tr>
-               &lt;td>&lt;b>Channel&lt;/b>&lt;/td>
-               &lt;td>&lt;b>Name&lt;/b>&lt;/td>
-               &lt;td>&lt;b>Description&lt;/b>&lt;/td>
-               &lt;td>&lt;b>Action&lt;/b>&lt;/td>
-               &lt;/tr>
-               &lt;tr>
+<body>
+<div class="wap" style="text-align: center;">
+<table border="1">
+               <tr>
+               <td><b>Channel</b></td>
+               <td><b>Name</b></td>
+               <td><b>Description</b></td>
+               <td><b>Action</b></td>
+               </tr>           
                <e2:element source="TimerList" ><e2:convert type="web:ListFiller" >
+               &lt;tr>
                &lt;td>&lt;font><e2:item name="ServiceName"/> &lt;/font>&lt;/td>
                &lt;td>&lt;font><e2:item name="Name"/> &lt;/font>&lt;/td>
                &lt;td>&lt;font><e2:item name="Description"/> &lt;/font>&lt;/td>
@@ -31,9 +31,9 @@ Version = '$Header$';
                &lt;/tr>
        </e2:convert>
        <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/table>
+</table>
 
-&lt;/div>
-&lt;/body>
-&lt;/html>
+</div>
+</body>
+</html>
 </e2:screen>
\ No newline at end of file
index 41bf4b8..0741d2c 100644 (file)
@@ -60,7 +60,7 @@ class WebScreen(Screen):
                Screen.__init__(self, session)
                self.stand_alone = True
                self.request = request
-               self.instance = None
+               self.instance = None            
 
 class DummyWebScreen(WebScreen):
        #use it, if you dont need any source, just to can do a static file with an xml-file
@@ -75,8 +75,8 @@ class UpdateWebScreen(WebScreen):
 class MessageWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["Message"] = Message(session,func = Message.PRINT)
-               self["GetAnswer"] = Message(session,func = Message.ANSWER)
+               self["Message"] = Message(session, func=Message.PRINT)
+               self["GetAnswer"] = Message(session, func=Message.ANSWER)
 
 class ServiceListReloadWebScreen(WebScreen):
        def __init__(self, session, request):
@@ -92,7 +92,28 @@ class AudioWebScreen(WebScreen):
 class AboutWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["About"] = About(session)
+               
+               from WebComponents.Sources.Network import Network
+               from WebComponents.Sources.Hdd import Hdd
+               from WebComponents.Sources.Frontend import Frontend
+               from Components.config import config
+               from Components.About import about
+               from Components.Sources.StaticText import StaticText
+               from Tools.DreamboxHardware import getFPVersion
+               from Tools.HardwareInfo import HardwareInfo
+               
+               hw = HardwareInfo()
+               
+               self["About"] = About(session)          
+               
+               self["Network"] = Network()
+               self["Hdd"] = Hdd()
+               self["Frontends"] = Frontend()                                  
+               self["EnigmaVersion"] = StaticText(about.getEnigmaVersionString())
+               self["ImageVersion"] = StaticText(about.getVersionString())
+               self["WebIfVersion"] = StaticText(config.plugins.Webinterface.version.value)
+               self["FpVersion"] = StaticText(str(getFPVersion()))
+               self["DeviceName"] = StaticText(hw.get_device_name())           
 
 class VolumeWebScreen(WebScreen):
        def __init__(self, session, request):
@@ -114,10 +135,10 @@ class ServiceWebScreen(WebScreen):
                WebScreen.__init__(self, session, request)
 
                fav = eServiceReference(service_types_tv + ' FROM BOUQUET "bouquets.tv" ORDER BY bouquet')
-               self["SwitchService"] = ServiceList(fav, command_func = self.zapTo, validate_commands=False)
-               self["ServiceList"] = ServiceList(fav, command_func = self.getServiceList, validate_commands=False)
+               self["SwitchService"] = ServiceList(fav, command_func=self.zapTo, validate_commands=False)
+               self["ServiceList"] = ServiceList(fav, command_func=self.getServiceList, validate_commands=False)
                self["ServiceListRecursive"] = ServiceListRecursive(session, func=ServiceListRecursive.FETCH)
-               self["localip"] = RequestData(request,what=RequestData.HOST)
+               self["localip"] = RequestData(request, what=RequestData.HOST)
 
        def getServiceList(self, sRef):
                self["ServiceList"].root = sRef
@@ -139,21 +160,24 @@ class ServiceWebScreen(WebScreen):
 class LocationsAndTagsWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["CurrentLocation"] = LocationsAndTags(session,LocationsAndTags.CURRLOCATION)
-               self["Locations"] = LocationsAndTags(session,LocationsAndTags.LOCATIONS)
-               self["Tags"] = LocationsAndTags(session,LocationsAndTags.TAGS)
+               self["CurrentLocation"] = LocationsAndTags(session, LocationsAndTags.CURRLOCATION)
+               self["Locations"] = LocationsAndTags(session, LocationsAndTags.LOCATIONS)
+               self["Tags"] = LocationsAndTags(session, LocationsAndTags.TAGS)
 
 class EPGWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
 
-               self["EPGTITLE"] = EPG(session,func=EPG.TITLE)
-               self["EPGSERVICE"] = EPG(session,func=EPG.SERVICE)
-               self["EPGBOUQUETNOW"] = EPG(session,func=EPG.BOUQUETNOW)
-               self["EPGBOUQUETNEXT"] = EPG(session,func=EPG.BOUQUETNEXT)
-               self["EPGSERVICENOW"] = EPG(session,func=EPG.SERVICENOW)
-               self["EPGSERVICENEXT"] = EPG(session,func=EPG.SERVICENEXT)
-               self["EPGBOUQUET"] = EPG(session,func=EPG.BOUQUET)
+               self["EPGTITLE"] = EPG(session, func=EPG.TITLE)
+               self["EPGSERVICE"] = EPG(session, func=EPG.SERVICE)             
+               self["EPGBOUQUETNOW"] = EPG(session, func=EPG.BOUQUETNOW)
+               self["EPGBOUQUETNEXT"] = EPG(session, func=EPG.BOUQUETNEXT)
+               self["EPGSERVICENOW"] = EPG(session, func=EPG.SERVICENOW)
+               self["EPGSERVICENEXT"] = EPG(session, func=EPG.SERVICENEXT)
+               self["EPGBOUQUET"] = EPG(session, func=EPG.BOUQUET)
+               self["localip"] = RequestData(request, what=RequestData.HOST)
+               
+               self["EPGSERVICEWAP"] = EPG(session, func=EPG.SERVICE, endtm=True)
 
        def getServiceList(self, sRef):
                self["ServiceList"].root = sRef
@@ -162,39 +186,38 @@ class MovieWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
                from Components.MovieList import MovieList
-               from Tools.Directories import resolveFilename,SCOPE_HDD
+               from Tools.Directories import resolveFilename, SCOPE_HDD
                movielist = MovieList(eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD)))
-               self["MovieList"] = Movie(session,movielist,func = Movie.LIST)
-               self["MovieFileDel"] = Movie(session,movielist,func = Movie.DEL)
-               self["MovieTags"] = Movie(session,movielist,func = Movie.TAGS)
-               self["localip"] = RequestData(request,what=RequestData.HOST)
+               self["MovieList"] = Movie(session, movielist, func=Movie.LIST)
+               self["MovieFileDel"] = Movie(session, movielist, func=Movie.DEL)
+               self["localip"] = RequestData(request, what=RequestData.HOST)
 
 class MediaPlayerWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["FileList"] = MP(session,func = MP.LIST)
-               self["PlayFile"] = MP(session,func = MP.PLAY)
-               self["Command"] = MP(session,func = MP.COMMAND)
-               self["WritePlaylist"] = MP(session,func = MP.WRITEPLAYLIST)
+               self["FileList"] = MP(session, func=MP.LIST)
+               self["PlayFile"] = MP(session, func=MP.PLAY)
+               self["Command"] = MP(session, func=MP.COMMAND)
+               self["WritePlaylist"] = MP(session, func=MP.WRITEPLAYLIST)
 
 class AutoTimerWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["AutoTimerList"] = AT(session,func = AT.LIST)
-               self["AutoTimerWrite"] = AT(session,func = AT.WRITE)
+               self["AutoTimerList"] = AT(session, func=AT.LIST)
+               self["AutoTimerWrite"] = AT(session, func=AT.WRITE)
 
 class TimerWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["TimerList"] = Timer(session, func = Timer.LIST)
-               self["TimerAddEventID"] = Timer(session, func = Timer.ADDBYID)
-               self["TimerAdd"] = Timer(session, func = Timer.ADD)
-               self["TimerDel"] = Timer(session, func = Timer.DEL)
-               self["TimerChange"] = Timer(session, func = Timer.CHANGE)
-               self["TimerListWrite"] = Timer(session, func = Timer.WRITE)
-               self["TVBrowser"] = Timer(session, func = Timer.TVBROWSER)
-               self["RecordNow"] = Timer(session, func = Timer.RECNOW)
-               self["TimerCleanup"] = Timer(session, func = Timer.CLEANUP)
+               self["TimerList"] = Timer(session, func=Timer.LIST)
+               self["TimerAddEventID"] = Timer(session, func=Timer.ADDBYID)
+               self["TimerAdd"] = Timer(session, func=Timer.ADD)
+               self["TimerDel"] = Timer(session, func=Timer.DEL)
+               self["TimerChange"] = Timer(session, func=Timer.CHANGE)
+               self["TimerListWrite"] = Timer(session, func=Timer.WRITE)
+               self["TVBrowser"] = Timer(session, func=Timer.TVBROWSER)
+               self["RecordNow"] = Timer(session, func=Timer.RECNOW)
+               self["TimerCleanup"] = Timer(session, func=Timer.CLEANUP)
 
 class RemoteWebScreen(WebScreen):
        def __init__(self, session, request):
@@ -214,26 +237,26 @@ class ParentControlWebScreen(WebScreen):
 class WAPWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
-               self["WAPFillOptionListYear"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-               self["WAPFillOptionListDay"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-               self["WAPFillOptionListMonth"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-               self["WAPFillOptionListShour"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-               self["WAPFillOptionListSmin"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-               self["WAPFillOptionListEhour"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-               self["WAPFillOptionListEmin"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
+               self["WAPFillOptionListYear"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
+               self["WAPFillOptionListDay"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
+               self["WAPFillOptionListMonth"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
+               self["WAPFillOptionListShour"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
+               self["WAPFillOptionListSmin"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
+               self["WAPFillOptionListEhour"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
+               self["WAPFillOptionListEmin"] = WAPfunctions(session, func=WAPfunctions.LISTTIME)
 
-               self["WAPFillOptionListRecord"] = WAPfunctions(session,func = WAPfunctions.OPTIONLIST)
-               self["WAPFillOptionListAfterEvent"] = WAPfunctions(session,func = WAPfunctions.OPTIONLIST)
+               self["WAPFillOptionListRecord"] = WAPfunctions(session, func=WAPfunctions.OPTIONLIST)
+               self["WAPFillOptionListAfterEvent"] = WAPfunctions(session, func=WAPfunctions.OPTIONLIST)
 
-               self["WAPFillValueName"] = WAPfunctions(session,func = WAPfunctions.FILLVALUE)
-               self["WAPFillValueDescr"] = WAPfunctions(session,func = WAPfunctions.FILLVALUE)
-               self["WAPFillLocation"] = WAPfunctions(session,func = WAPfunctions.LOCATIONLIST)
-               self["WAPFillTags"] = WAPfunctions(session,func = WAPfunctions.TAGLIST)
+               self["WAPFillValueName"] = WAPfunctions(session, func=WAPfunctions.FILLVALUE)
+               self["WAPFillValueDescr"] = WAPfunctions(session, func=WAPfunctions.FILLVALUE)
+               self["WAPFillLocation"] = WAPfunctions(session, func=WAPfunctions.LOCATIONLIST)
+               self["WAPFillTags"] = WAPfunctions(session, func=WAPfunctions.TAGLIST)
 
-               self["WAPFillOptionListRepeated"] = WAPfunctions(session,func = WAPfunctions.REPEATED)
-               self["WAPServiceList"] = WAPfunctions(session, func = WAPfunctions.SERVICELIST)
+               self["WAPFillOptionListRepeated"] = WAPfunctions(session, func=WAPfunctions.REPEATED)
+               self["WAPServiceList"] = WAPfunctions(session, func=WAPfunctions.SERVICELIST)
 
-               self["WAPdeleteOldOnSave"] = WAPfunctions(session,func = WAPfunctions.DELETEOLD)
+               self["WAPdeleteOldOnSave"] = WAPfunctions(session, func=WAPfunctions.DELETEOLD)
 
 class StreamingWebScreen(WebScreen):
        def __init__(self, session, request):
@@ -248,13 +271,13 @@ class M3UStreamingWebScreen(WebScreen):
                from Components.Sources.Config import Config
                from Components.config import config
                self["ref"] = StaticText()
-               self["localip"] = RequestData(request,what=RequestData.HOST)
+               self["localip"] = RequestData(request, what=RequestData.HOST)
 
 class M3UStreamingCurrentServiceWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
                self["CurrentService"] = CurrentService(session)
-               self["localip"] = RequestData(request,what=RequestData.HOST)
+               self["localip"] = RequestData(request, what=RequestData.HOST)
 
 class TsM3U(WebScreen):
        def __init__(self, session, request):
@@ -263,7 +286,7 @@ class TsM3U(WebScreen):
                from Components.Sources.Config import Config
                from Components.config import config
                self["file"] = StaticText()
-               self["localip"] = RequestData(request,what=RequestData.HOST)
+               self["localip"] = RequestData(request, what=RequestData.HOST)
 
 class RestartWebScreen(WebScreen):
        def __init__(self, session, request):
@@ -282,22 +305,35 @@ class GetPid(WebScreen):
                        VPID = hex(pidinfo.getInfo(iServiceInformation.sVideoPID))
                        APID = hex(pidinfo.getInfo(iServiceInformation.sAudioPID))
                        PPID = hex(pidinfo.getInfo(iServiceInformation.sPMTPID))
-                       self["pids"] = StaticText("%s,%s,%s"%(PPID.lstrip("0x"),VPID.lstrip("0x"),APID.lstrip("0x")))
+                       self["pids"] = StaticText("%s,%s,%s" % (PPID.lstrip("0x"), VPID.lstrip("0x"), APID.lstrip("0x")))
                 else:
                        self["pids"] = StaticText("0x,0x,0x")
 
-                self["localip"] = RequestData(request,what=RequestData.HOST)
+                self["localip"] = RequestData(request, what=RequestData.HOST)
 
-class About2(WebScreen):
+class DeviceInfo(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
                from WebComponents.Sources.Network import Network
                from WebComponents.Sources.Hdd import Hdd
-               from WebComponents.Sources.Frontend import Frontend
+               from WebComponents.Sources.Frontend import Frontend             
+               from Components.config import config
+               from Components.About import about
+               from Components.Sources.StaticText import StaticText
+               from Tools.DreamboxHardware import getFPVersion
+               from Tools.HardwareInfo import HardwareInfo
+               
+               hw = HardwareInfo()
+               
                self["Network"] = Network()
                self["Hdd"] = Hdd()
-               self["Frontends"] = Frontend()
-
+               self["Frontends"] = Frontend()                          
+               self["EnigmaVersion"] = StaticText(about.getEnigmaVersionString())
+               self["ImageVersion"] = StaticText(about.getVersionString())
+               self["WebIfVersion"] = StaticText(config.plugins.Webinterface.version.value)
+               self["FpVersion"] = StaticText(str(getFPVersion()))
+               self["DeviceName"] = StaticText(hw.get_device_name())
+               
 # implements the 'render'-call.
 # this will act as a downstream_element, like a renderer.
 class OneTimeElement(Element):
@@ -307,9 +343,9 @@ class OneTimeElement(Element):
 
        # CHECKME: is this ok performance-wise?
        def handleCommand(self, args):
-               if self.source_id.find(",") >=0:
+               if self.source_id.find(",") >= 0:
                        paramlist = self.source_id.split(",")
-                       list={}
+                       list = {}
                        for key in paramlist:
                                arg = args.get(key, [])
                                if len(arg) == 0:
@@ -393,7 +429,7 @@ class TextToURL(Converter):
                Converter.__init__(self, arg)
 
        def getHTML(self, id):
-               return self.source.text.replace(" ","%20")
+               return self.source.text.replace(" ", "%20")
 
 class ReturnEmptyXML(Converter):
        def __init__(self, arg):
@@ -417,7 +453,7 @@ class JavascriptUpdate(Converter):
        def getHTML(self, id):
                # 3c5x9, added parent. , this is because the ie loads this in a iframe. an the set is in index.html.xml
                #                all other will replace this in JS
-               return '<script>parent.set("%s", "%s");</script>\n'%(id, self.source.text.replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"').replace('\xb0', '&deg;'))
+               return '<script>parent.set("%s", "%s");</script>\n' % (id, self.source.text.replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"').replace('\xb0', '&deg;'))
 
 # the performant 'one-dimensonial listfiller' engine (podlfe)
 class SimpleListFiller(Converter):
@@ -425,9 +461,9 @@ class SimpleListFiller(Converter):
                Converter.__init__(self, arg)
                
        def getText(self):
-               l = self.source.list
+               l = self.source.simplelist
                conv_args = self.converter_arguments
-               print "[webif.py] conv_args: " %conv_args
+               print "[webif.py] conv_args: " % conv_args
                
                list = [ ]
                for element in conv_args:
@@ -454,12 +490,20 @@ class SimpleListFiller(Converter):
                                        append(str(item).replace("%", "%25").replace("+", "%2B").replace('&', '%26').replace('?', '%3f').replace(' ', '+'))
                                elif filternum == 5:
                                        append(quote(str(item)))
+                               elif filternum == 6:
+                                       time = parseint(item) or 0
+                                       t = localtime(time)
+                                       append("%02d:%02d" % (t.tm_hour, t.tm_min))
+                               elif filternum == 7:
+                                       time = parseint(item) or 0
+                                       t = localtime(time)
+                                       append("%d min" % (time / 60))
                                else:
                                        append(str(item))
                # (this will be done in c++ later!)
 
-               return ''.join(strlist)
-
+               return ''.join(strlist)         
+       
        text = property(getText)
                
                                
@@ -503,6 +547,16 @@ class ListFiller(Converter):
                                        append(str(item[element]).replace("%", "%25").replace("+", "%2B").replace('&', '%26').replace('?', '%3f').replace(' ', '+'))
                                elif filternum == 5:
                                        append(quote(str(item[element])))
+                               elif filternum == 6:
+                                       from time import localtime
+                                       time = int(float(item[element])) or 0
+                                       t = localtime(time)
+                                       append("%02d:%02d" % (t.tm_hour, t.tm_min))
+                               elif filternum == 7:
+                                       from time import localtime
+                                       time = int(float(item[element])) or 0
+                                       t = localtime(time)
+                                       append("%d min" % (time / 60))                                  
                                else:
                                        append(str(item[element]))
                # (this will be done in c++ later!)
@@ -592,7 +646,7 @@ class webifHandler(ContentHandler):
 
        def parse_item(self, attrs):
                if "name" in attrs:
-                       filter = {"": 1, "javascript_escape": 2, "xml": 3, "uri": 4, "urlencode": 5}[attrs.get("filter", "")]
+                       filter = {"": 1, "javascript_escape": 2, "xml": 3, "uri": 4, "urlencode": 5, "time": 6, "minutes": 7}[attrs.get("filter", "")]
                        self.sub.append(ListItem(attrs["name"], filter))
                else:
                        assert "macro" in attrs, "e2:item must have a name= or macro= attribute!"
@@ -600,14 +654,14 @@ class webifHandler(ContentHandler):
 
        def startElement(self, name, attrs):
                if name == "e2:screen":
-                       self.screen = eval(attrs["name"])(self.session,self.request) # fixme
+                       self.screen = eval(attrs["name"])(self.session, self.request) # fixme
                        self.screens.append(self.screen)
                        return
 
                if name[:3] == "e2:":
                        self.mode += 1
 
-               tag = [' %s="%s"' %(key,val) for (key, val) in attrs.items()]
+               tag = [' %s="%s"' % (key, val) for (key, val) in attrs.items()]
                tag.insert(0, name)
                tag.insert(0, '<')
                tag.append('>')
@@ -674,7 +728,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,req)
+       handler = webifHandler(session, req)
        parser = make_parser()
        parser.setFeature(feature_namespaces, 0)
        parser.setContentHandler(handler)