[Telepathy-commits] [multi-jingle/master] Add a claiming and waiting phase

Sjoerd Simons sjoerd.simons at collabora.co.uk
Mon Jan 19 18:40:07 PST 2009


---
 multi-jingle-client.py |   49 ++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/multi-jingle-client.py b/multi-jingle-client.py
index 77e8763..12306ce 100644
--- a/multi-jingle-client.py
+++ b/multi-jingle-client.py
@@ -202,7 +202,9 @@ class UI(gtk.Window):
 class Muc:
     PREPARING = 0
     JOINING = 1
-    PRESENT = 2
+    CLAIMING = 2
+    WAITING = 3
+    PRESENT = 4
 
     def __init__(self, client, jid):
         self.jid = jid
@@ -272,8 +274,15 @@ class Muc:
         if mingle is None:
             return
 
+        if self.state == Muc.WAITING:
+            if not from_jid in self.mingle_presences:
+                return
+
         self.mingle_presences[from_jid] = stanza
 
+        if self.state == Muc.WAITING:
+            self.maybe_start_calls()
+
     def update_presence(self, mingle = None):
         join = domish.Element((None, 'presence'))
         join['to'] = self.my_jid.full()
@@ -382,10 +391,11 @@ class Muc:
         dlist = defer.DeferredList(deferreds)
         return dlist
 
-    def joined (self):
-        print 'joined the room'
+    def start_calls (self):
         deferreds = []
 
+        self.state = Muc.PRESENT
+
         if len(self.conference.sessions) == 0:
             # Trigger voice and video streams
             self.conference.get_session("video", farsight.MEDIA_TYPE_VIDEO)
@@ -403,8 +413,33 @@ class Muc:
         dlist = defer.DeferredList(deferreds)
         dlist.addCallback(self.participants_done)
 
+    def maybe_start_calls(self):
+        for stanza in self.mingle_presences.itervalues():
+            contents = xpath.queryForNodes ('/presence/mingle/content', stanza)
+
+            for c in contents:
+                if c.hasAttribute("preparing"):
+                    return
+
+        self.start_calls ()
+
+    def claimed(self):
+        self.state = Muc.WAITING
+        self.maybe_start_calls()
+
+    def joined (self):
+        print "Preparing the conference"
+        self.state = Muc.CLAIMING
+        mingle = domish.Element((ns.MINGLE, 'mingle'))
+        c = mingle.addElement ('content')
+        c['name'] = 'video'
+        c['preparing'] = 'true'
+        c = mingle.addElement ('content')
+        c['name'] = 'audio'
+        c['preparing'] = 'true'
+        self.update_presence(mingle)
+
     def presence(self, stanza):
-        global state
         from_jid = JID(stanza['from'])
 
         if from_jid.userhost() != self.jid.userhost():
@@ -418,17 +453,19 @@ class Muc:
                 return
 
             if from_jid == self.my_jid:
-                self.state = Muc.PRESENT
                 self.joined()
             else:
                 print '%s is in room' % from_jid.resource
                 self.presence_(stanza)
         else:
             if from_jid == self.my_jid:
-                return
+                if self.state == Muc.CLAIMING:
+                    self.claimed()
             elif stanza.getAttribute('type') == 'unavailable':
                 print '%s left room' % from_jid.resource
             else:
+                if self.state in [ Muc.CLAIMING, Muc.WAITING ]:
+                    self.presence_(stanza)
                 print '%s has joined room' % from_jid.resource
 
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list