[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