Author: dmeyer
Date: Tue Mar 21 14:07:04 2006
New Revision: 8119

Modified:
   trunk/core/src/ipc/tvserver.py

Log:
integrate epg into tvserver ipc code

Modified: trunk/core/src/ipc/tvserver.py
==============================================================================
--- trunk/core/src/ipc/tvserver.py      (original)
+++ trunk/core/src/ipc/tvserver.py      Tue Mar 21 14:07:04 2006
@@ -356,6 +356,7 @@
             return False, 'Recordserver unavailable'
 
         if prog.channel == 'ANY':
+            # FIXME: crash!!!!!!
             channel = []
             for c in kaa.epg.channels:
                 channel.append(c.id)
@@ -386,9 +387,77 @@
         r.call()
 
 
+
+class EPG(object):
+    """
+    Handling of epg from the recordserver.
+    """
+    def __init__(self, instance):
+        self.auth = instance.cfg.hashkey.strip()
+        self.server = None
+        self.signals = {
+            'connected' : kaa.notifier.Signal(),
+            'disconnected' : kaa.notifier.Signal() }
+        
+        instance.signals['new-entity'].connect(self.new_entity)
+        instance.signals['lost-entity'].connect(self.lost_entity)
+
+
+    def new_entity(self, entity):
+        if not entity.matches(SERVER):
+            return True
+        self.server = entity
+        self.guide = None
+        self.connect = self.server.rpc('home-theatre.epg.connect', 
self.epg_cb).call
+        self.connect()
+        return True
+
+
+    def lost_entity(self, entity):
+        if entity == self.server:
+            self.server = None
+            self.guide = None
+        return True
+
+
+    def lost_guide(self):
+        if self.guide:
+            log.error('lost epg')
+            self.guide = None
+            self.signals['disconnected'].emit()
+
+        
+    def epg_cb(self, result):
+        if not self.server:
+            return
+        if not result:
+            log.error(result)
+            return
+        host, port = result
+        if not host:
+            kaa.notifier.OneShotTimer(self.connect).start(0.01)
+            return
+        self.guide = kaa.epg.connect((host, port), self.auth)
+        self.guide.signals['disconnected'].connect(self.lost_guide)
+        log.info('connected to epg server')
+        self.signals['connected'].emit()
+        
+
+    def get_channels(self):
+        if self.guide:
+            return self.guide.get_channels()
+        return []
+
+
+    def search(self, *args, **kwargs):
+        if self.guide:
+            return self.guide.search(*args, **kwargs)
+        return []
+
+        
 def ipc_connect(instance):
     # the two objects handling recordings and favorites
     return 'tvserver', dict(
         recordings = Recordings(instance),
-        favorites  = Favorites(instance))
-
+        favorites  = Favorites(instance),
+        epg  = EPG(instance))


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to