Author: duncan
Date: Thu Nov  1 18:19:06 2007
New Revision: 10057

Log:
Added more record client kaa rpc functions
Updated tv.upsoon to use them


Modified:
   branches/rel-1/freevo/src/tv/plugins/upsoon.py
   branches/rel-1/freevo/src/tv/record_client.py

Modified: branches/rel-1/freevo/src/tv/plugins/upsoon.py
==============================================================================
--- branches/rel-1/freevo/src/tv/plugins/upsoon.py      (original)
+++ branches/rel-1/freevo/src/tv/plugins/upsoon.py      Thu Nov  1 18:19:06 2007
@@ -40,6 +40,7 @@
 import glob
 import thread
 import tv.v4l2
+from tv.record_client import RecordClient
 from kaa.notifier import Timer, EventHandler
 from tv.channels import FreevoChannels
 from util.marmalade import jellyToXML, unjellyFromXML
@@ -79,16 +80,19 @@
         self.event = EventHandler(self.event_handler)
         self.event.register(('VIDEO_START', 'VIDEO_END'))
 
-        server_string = 'http://%s:%s/' % (config.RECORDSERVER_IP, 
config.RECORDSERVER_PORT)
-        _debug_('%s' % server_string)
-        self.server = xmlrpclib.Server(server_string, allow_none=1)
-        _debug_('%s' % self.server)
-
-        self.serverup = None
-        self.next_program = self.findNextProgram()
-        _debug_('%s' % (self.next_program))
+        self.recordclient = RecordClient()
+        #server_string = 'http://%s:%s/' % (config.RECORDSERVER_IP, 
config.RECORDSERVER_PORT)
+        #_debug_('%s' % server_string)
+        #self.server = xmlrpclib.Server(server_string, allow_none=1)
+        #_debug_('%s' % self.server)
+
+        #self.serverup = None
+        #self.next_program = self.findNextProgram()
+        #_debug_('%s' % (self.next_program))
+        self.next_program = None
 
         self.fc = FreevoChannels()
+        self.rdev = config.RADIO_DEVICE
 
         self.seconds_before_announce = 120
         self.seconds_before_start = 60
@@ -97,112 +101,31 @@
         self.stopped = False    # flag that tells upsoon stopped the tv, not 
the user
 
 
-    def findNextProgram(self):
-        """ returns the next program that will be recorded """
-        _debug_('findNextProgram(self)', 2)
-        serverup = True
-        try:
-            (status, message) = self.server.findNextProgram()
-            _debug_('status=%s, message=%s' % (status, message), 2)
-        except TypeError, e:
-            _debug_('findNextProgram:%s' % e, DINFO)
-            status = False
-            pass
-        except Exception, e:
-            serverup = False
-            status = False
-            if sys.exc_type != socket.error:
-                traceback.print_exc()
-                _debug_('findNextProgram:%s' % e, 0)
-
-        if self.serverup != serverup:
-            self.serverup = serverup
-            if serverup:
-                _debug_('The record server is up')
-            else:
-                _debug_('The record server is down')
-
-        if not status:
-            return None
-
-        next_program = unjellyFromXML(message)
-        return next_program
-
-
-    def isPlayerRunning(self):
-        """
-        Check with the record server if suspended by user
-        """
-        _debug_('isPlayerRunning(self)', 2)
-        serverup = True
-        try:
-            (status, message) = self.server.isPlayerRunning()
-            _debug_('status=%s, message=%s' % (status, message), 2)
-        except Exception, e:
-            serverup = False
-            message = None
-            if sys.exc_type != socket.error:
-                traceback.print_exc()
-                _debug_('isPlayerRunning:%s' % e, 0)
-
-        if self.serverup != serverup:
-            self.serverup = serverup
-            if serverup:
-                _debug_('The record server is up')
-            else:
-                _debug_('The record server is down')
+    def findNextProgramHandler(self, result):
+        """ Handles the result from the findNextProgram call """
+        self.next_program = result
 
-        if message == None:
-            return None
-
-        return status
-
-
-    def getPlayerRunning(self):
-        """
-        Return is a player is running
-        """
-        _debug_('getPlayerRunning(self)', 2)
-        return self.is_player_running
-
-
-    def close(self):
-        """
-        to be called before the plugin exists.
-        It terminates the connection with the server
-        """
-        _debug_('close(self)')
-
-
-    def timer_handler(self):
-        """
-        Sends a poll message to the record server
-        """
-        now=time.time()
-        _debug_('poll(self)', 2)
-
-        self.next_program  = self.findNextProgram()
+        now = time.time()
 
         _debug_('now=%s next=%s ' % (time.strftime('%T', time.localtime(now)), 
self.next_program), 2)
 
         if self.next_program == None:
-            return None
+            return
 
-        vdev=self.fc.getVideoGroup(self.next_program.channel_id, False).vdev
-        rdev=config.RADIO_DEVICE
+        self.vdev = self.getVideoForChannel(self.next_program.channel_id)
 
-        self.tv_lockfile = config.FREEVO_CACHEDIR + 
'/record.'+vdev.split('/')[-1]
+        self.tv_lockfile = os.path.join(config.FREEVO_CACHEDIR, 
'record.'+vdev.split('/')[-1])
 
         # Remove the pending record lock file when a record lock file is 
written
         if os.path.exists(self.pending_lockfile):
             if os.path.exists(self.tv_lockfile):
                 os.remove(self.pending_lockfile)
                 _debug_("record.soon lockfile removed")
-            return None
+            return
 
         # Check if a recording is in progress
         if os.path.exists(self.tv_lockfile):
-            return None
+            return
 
         secs_to_next = self.next_program.start - config.TV_RECORD_PADDING_PRE 
- int(now + 0.5)
         _debug_('next recording in %s secs' % (secs_to_next), 2)
@@ -211,9 +134,21 @@
         # stop the player 60 seconds before recording is due to start
 
         if (secs_to_next > self.seconds_before_announce):
-            return None
+            return
+
+        _debug_('stopping video or radio player')
+        self.stopVideoInUse(self.vdev)
+        self.stopRadioInUse(self.rdev)
+        return
+
+
+    def getVideoForChannel(self, channel_id):
+        """ get the video device given a channel id """
+        return self.fc.getVideoGroup(channel_id, False).vdev
 
-        # check the video
+
+    def stopVideoInUse(self, vdev):
+        """ stop the video device if being used """
         if vdev:
             try:
                 dev_fh = os.open(vdev, os.O_TRUNC)
@@ -232,7 +167,9 @@
             except:
                 _debug_('cannot check video device \"%s\"' % (vdev), 0)
 
-        # check the radio
+
+    def stopRadioInUse(self, rdev):
+        """ stop the radio device if being used """
         if rdev:
             try:
                 dev_fh = os.open(rdev, os.O_TRUNC)
@@ -251,7 +188,31 @@
             except:
                 _debug_('cannot check radio device \"%s\"' % (rdev), 0)
 
-        return None
+    def getPlayerRunning(self):
+        """
+        Return is a player is running
+        """
+        _debug_('getPlayerRunning(self)', 2)
+        return self.is_player_running
+
+
+    def close(self):
+        """
+        to be called before the plugin exists.
+        It terminates the connection with the server
+        """
+        _debug_('close(self)')
+
+
+    def timer_handler(self):
+        """
+        Sends a poll message to the record server
+        """
+        _debug_('timer_handler()', 2)
+
+        self.recordclient.findNextProgram(self.findNextProgramHandler)
+
+        return True
 
 
     def event_handler(self, event):
@@ -277,21 +238,38 @@
 
 if __name__ == '__main__':
     # test code, run with freevo execute /path/to/upsoon.py
-    if len(sys.argv) >= 2:
-        function = sys.argv[1]
-    else:
-        function = 'none'
+    config.DEBUG = 2
+    function = None
+    if len(sys.argv) > 1:
+        function = sys.argv[1].lower()
+        rc = RecordClient()
+
+    if function == "run":
+        pi = PluginInterface()
+        Timer(pi.timer_handler).start(15)
+        kaa.main()
+
+    elif function == "findnextprogram":
+        def handler(result):
+            print 'findnextprogram=%r' % (result)
+            print result.__dict__
+            raise SystemExit
+        rc.findNextProgram(handler)
+        kaa.main()
+
+    elif function == "isplayerrunning":
+        def handler(result):
+            print 'isplayerrunning=%r' % (result)
+            raise SystemExit
+        rc.isPlayerRunning(handler)
+        kaa.main()
 
-    if function == "isplayerrunning":
-        (result, response) = isPlayerRunning()
-        print response
-
-    # looks like devinfo...
-    fc = FreevoChannels()
-    vg=fc.getVideoGroup('K10', False)
-    print "vg=%s" % vg
-    print "dir(%s)" % dir(vg)
-    for it in dir(vg):
-        print "   %s:%s" % (it, eval('vg.'+it))
-    vdev=vg.vdev
-    print "vdev=%s" % vdev
+    else:
+        fc = FreevoChannels()
+        vg=fc.getVideoGroup('K10', False)
+        print "vg=%s" % vg
+        print "dir(%s)" % dir(vg)
+        for it in dir(vg):
+            print "   %s:%s" % (it, eval('vg.'+it))
+        vdev=vg.vdev
+        print "vdev=%s" % vdev

Modified: branches/rel-1/freevo/src/tv/record_client.py
==============================================================================
--- branches/rel-1/freevo/src/tv/record_client.py       (original)
+++ branches/rel-1/freevo/src/tv/record_client.py       Thu Nov  1 18:19:06 2007
@@ -60,16 +60,37 @@
             print e
             raise
 
-    @kaa.notifier.execute_in_mainloop()
+    [EMAIL PROTECTED]()
     def recordserver_rpc(self, cmd, *args, **kwargs):
         print 'RecordClient.recordserver_rpc(cmd=%r, args=%r, kwargs=%r)' % 
(cmd, args, kwargs)
         return self.server.rpc(cmd, *args, **kwargs)
 
     def getScheduledRecordings(self):
+        """ get the scheduled recordings, returning an in process object """
         print 'RecordClient.getScheduledRecordings()'
         inprogress = self.recordserver_rpc('getScheduledRecordings')
         print 'RecordClient.getScheduledRecordings.inprogress = %r' % 
(inprogress)
         return inprogress
+
+    # this redefined getScheduledRecordings
+    def getScheduledRecordings(self, callback):
+        """ get the scheduled recordings, using a callback function """
+        print 'RecordClient.getScheduledRecordings(callback=%r)' % (callback)
+        res = self.server.rpc('getScheduledRecordings').connect(callback)
+        print 'RecordClient.getScheduledRecordings().res = %r' % (res)
+        return res
+
+
+    def findNextProgram(self, callback):
+        """ find the next program using a callback function """
+        print 'RecordClient.findNextProgram(callback=%r)' % (callback)
+        self.server.rpc('findNextProgram').connect(callback)
+
+
+    def isPlayerRunning(self, callback):
+        """ is a player running, using a callback function """
+        print 'RecordClient.isPlayerRunning(callback=%r)' % (callback)
+        self.server.rpc('isPlayerRunning').connect(callback)
         
 
 
@@ -278,6 +299,15 @@
 
 
 if __name__ == '__main__':
+
+    def handler(result):
+        print 'result = %r' % (result)
+        raise SystemExit
+
+    rc = RecordClient()
+    rc.getScheduledRecordings(handler)
+    kaa.main()
+
     if len(sys.argv) >= 2:
         function = sys.argv[1]
     else:

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to