Implement fetching of Subservices without zapping.
authorStephan Reichholf <sreichholf@users.schwerkraft.elitedvb.net>
Sat, 9 May 2009 14:26:39 +0000 (14:26 +0000)
committerStephan Reichholf <sreichholf@users.schwerkraft.elitedvb.net>
Sat, 9 May 2009 14:26:39 +0000 (14:26 +0000)
use "/web/streamsubservices?sRef=xyz" for getting subservices for a service you are currently streaming
The Result ist the same as with /web/subservices

Bump enigma2 Version requirements

webinterface/CONTROL/control
webinterface/src/WebComponents/Sources/SubServices.py
webinterface/src/web-data/config.js
webinterface/src/web-data/vlcplayer.js
webinterface/src/web/streamsubservices.xml [new file with mode: 0644]
webinterface/src/webif.py

index b002773..00e06d9 100644 (file)
@@ -6,5 +6,5 @@ Priority: optional
 Maintainer: Felix Domke <tmbinc@elitedvb.net>
 Architecture: noarch
 Homepage: http://enigma2-plugins.schwerkraft.elitedvb.net/
-Depends: enigma2(>2.6git20090217), twisted-web2, python-pyopenssl, python-crypt
+Depends: enigma2(>2.6git20090506), twisted-web2, python-pyopenssl, python-crypt
 Source: http://enigma2-plugins.schwerkraft.elitedvb.net/
index 0fe6127..9dd1da0 100644 (file)
@@ -3,43 +3,72 @@ from ServiceReference import ServiceReference
 #from time import sleep
 
 class SubServices(Source):
-       def __init__(self, session):
+       def __init__(self, session, streamingScreens = None):
                Source.__init__(self)
                self.session = session
+               self.streamingScreens = streamingScreens
+               self.cmd = None
        
        def handleCommand(self, cmd):
                if cmd is not None:
-                       #TODO some logic here
-                       pass
+                       print "[SubServices].handleCommand %s" %cmd
+                       self.cmd = cmd
        
-       def command(self):
-               print "SubServices was called"
+       def getSubservices(self):
+               print "[SubServices].getSubservices called"
                list = []
-
-               #sleep(5) # FIXMEEEEE very ugly code !!
-
-               list0 = []
-               currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference()
-               if currentServiceRef is not None:
-                       list.append([currentServiceRef.toString(),
-                                                ServiceReference(currentServiceRef).getServiceName()]
-                                                )
-
-                       currentService = self.session.nav.getCurrentService()
-                       subservices = currentService and currentService.subServices()
-                       if subservices or subservices.getNumberOfSubservices() != 0:
-                               n = subservices and subservices.getNumberOfSubservices()
-                               for x in range(n):
-                                       sub = subservices.getSubservice(x)
-                                       list.append([sub.toString(), sub.getName()])
-
-               else:
+               
+               if self.streamingScreens is None:
+                       currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference()
+                       if currentServiceRef is not None:
+                               list.append([currentServiceRef.toString(),
+                                                        ServiceReference(currentServiceRef).getServiceName()]
+                                                        )
+       
+                               currentService = self.session.nav.getCurrentService()
+                               subservices = currentService and currentService.subServices()
+                               if subservices or subservices.getNumberOfSubservices() != 0:
+                                       n = subservices and subservices.getNumberOfSubservices()
+                                       for x in range(n):
+                                               sub = subservices.getSubservice(x)
+                                               list.append([sub.toString(), sub.getName()])
+       
+                       else:
+                               list.append(["N/A", "N/A"])
+       
+                       print "SubServices is returning list ", list
+                       return list
+               
+               elif self.cmd is not None:
+                       print "[SubServices].getSubservices for Streaming Service"
+                       for screen in self.streamingScreens:
+                               if screen is not None:
+                                       service = screen.getRecordService()
+                                       sref = ServiceReference(screen.getRecordServiceRef())                                           
+                                       if service is not None:                                         
+                                               print "[SubServices] serviceref: %s | cmd: %s" %(sref, self.cmd)
+                                               
+                                               if sref.__str__() == self.cmd:
+                                                       list.append([sref.__str__(), sref.getServiceName()])
+                                                       print "[SubServices] Matching recordSerivce found!"
+                                                       subservices = service and service.subServices()
+                                                       if subservices or subservices.getNumberOfSubservices() != 0:
+                                                               n = subservices and subservices.getNumberOfSubservices()
+                                                               for x in range(n):
+                                                                       sub = subservices.getSubservice(x)
+                                                                       list.append([sub.toString(), sub.getName()])
+                                                               
+                                                               return list
+                                                       else:
+                                                               print "[SubServices] no items: %s" %subservices
+                                       else:
+                                               print "[SubServices] Service is None!"
+               if len(list) == 0:
                        list.append(["N/A", "N/A"])
 
-               print "SubServices is returning list ", list
                return list
-
-       list = property(command)
+       
+       list = property(getSubservices)
        lut = {"ServiceReference": 0,
                        "Name": 1
                        }
index e3d2f35..c4aff91 100644 (file)
@@ -22,6 +22,7 @@ var url_epgnext = "/web/epgnext?bRef="; // plus bouquetRev
 
 var url_getServices = "/web/getservices?sRef="; // plus serviceref
 var url_subservices = "/web/subservices"; // subservices for current service
+var url_streamsubservices = "/web/streamsubservices?sRef="; // subservices for streaming service
 
 var url_updates= "/web/updates.html";
 
index f7eaa4b..12b6b47 100644 (file)
@@ -1,5 +1,7 @@
 var vlc = '';
-
+var currentServiceRef = '';
+var bouquetUpdatePoller = '';
+var currentBouquetRef = '';
 /*
  * incoming request-data for Current Service Epg
  */
@@ -30,14 +32,14 @@ function loadVLCEPGServiceNow(servicereference) {
 }
 
 function onServiceSelected() {
-       var sref = $('channelSelect').options[$('channelSelect').selectedIndex].id;
+       currentServiceRef = $('channelSelect').options[$('channelSelect').selectedIndex].id;
        
-       if(sref !== "vlcemptyservice"){
-               loadVLCEPGServiceNow(sref);
-               setStreamTarget(sref);
+       if(currentServiceRef !== "vlcemptyservice"){
+               loadVLCEPGServiceNow(currentServiceRef);
+               setStreamTarget(currentServiceRef);
                
                if($('vlcZap').checked){                        
-                       doRequest("/web/zap?sRef=" + sref);                     
+                       doRequest("/web/zap?sRef=" + currentServiceRef);                        
                }
                delayedLoadVlcSubservices();
        } else {
@@ -66,9 +68,18 @@ function incomingVLCBouquetList(request) {
                loadVLCBouquet(bouquets[0].getServiceReference());
        }
 }
+function reloadVLCBouquet(){
+       loadVLCBouquet(currentBouquetRef);
+}
+
 
 function loadVLCBouquet(servicereference) {
+//     clearInterval(bouquetUpdatePoller);     
+       currentBouquetRef = servicereference;
+       
        loadVLCChannelList(servicereference);
+       
+//     bouquetUpdatePoller = setInterval(reloadVLCBouquet, 30000);
 }
 
 function incomingVLCSubservices(request){
@@ -106,7 +117,8 @@ function incomingVLCSubservices(request){
 }
 
 function loadVlcSubservices(){
-       doRequest(url_subservices, incomingVLCSubservices);
+       var url = url_streamsubservices + currentServiceRef;
+       doRequest(url, incomingVLCSubservices);
 }
 
 function delayedLoadVlcSubservices(){
@@ -259,6 +271,7 @@ function setStreamTarget(servicereference) {
 function loadVLCBouquets() {
        url = url_getServices + bouquetsTv;
        doRequest(url, incomingVLCBouquetList);
+       
 }
 
 /*
diff --git a/webinterface/src/web/streamsubservices.xml b/webinterface/src/web/streamsubservices.xml
new file mode 100644 (file)
index 0000000..489f196
--- /dev/null
@@ -0,0 +1,10 @@
+<e2:screen name="StreamSubServiceWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2servicelist><e2:element source="StreamSubServices" id="sRef"><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>
+</e2servicelist>
+</e2:screen>
\ No newline at end of file
index 0741d2c..fd607f1 100644 (file)
@@ -130,6 +130,11 @@ class SubServiceWebScreen(WebScreen):
                WebScreen.__init__(self, session, request)
                self["SubServices"] = SubServices(session)
 
+class StreamSubServiceWebScreen(WebScreen):
+       def __init__(self, session, request):
+               WebScreen.__init__(self, session, request)
+               self["StreamSubServices"] = SubServices(session, streamingScreens)
+
 class ServiceWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
@@ -258,11 +263,25 @@ class WAPWebScreen(WebScreen):
 
                self["WAPdeleteOldOnSave"] = WAPfunctions(session, func=WAPfunctions.DELETEOLD)
 
+streamingScreens = []
+
 class StreamingWebScreen(WebScreen):
        def __init__(self, session, request):
                WebScreen.__init__(self, session, request)
                from Components.Sources.StreamService import StreamService
-               self["StreamService"] = StreamService(self.session.nav)
+               self["StreamService"] = StreamService(self.session.nav)         
+               streamingScreens.append(self)
+               self.screenIndex = len(streamingScreens) - 1
+       
+       def getRecordService(self):
+               if self.has_key("StreamService"):
+                       return self["StreamService"].getService()
+               return None
+       
+       def getRecordServiceRef(self):
+               if self.has_key("StreamService"):
+                       return self["StreamService"].ref
+               return None
 
 class M3UStreamingWebScreen(WebScreen):
        def __init__(self, session, request):