Changeset 165

Show
Ignore:
Timestamp:
05/29/02 10:02:01 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBJabber/RBJabber/Conference.py

    r164 r165  
    4747from Foundation.Jabber.JabberSubject import JabberSubjectBase 
    4848from Foundation.Jabber import JID 
     49from Foundation.Jabber import JabberObserver as JObs 
    4950from Foundation.SubjectObserver.Observer import Observer 
     51from Foundation.SubjectObserver.AttributedSubject import AttributedSubject 
    5052 
    5153#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    8082        JC.stream.AddObserver('iq', obs) 
    8183 
     84        # Prepare to get the conference roster 
     85        self.roster = AttributedSubject() 
     86        obs = JObs.JabberObserver(self._OnIQBrowseSets, BidValue=0.1) 
     87        obs.AddRule(JObs.MatchAttributes(type='set', from_=self.ConferenceJID.nominal())) 
     88        obs.AddRule(JObs.MatchHasChildNamespace('jabber:iq:browse')) 
     89        self.stream.AddObserver('iq', obs) 
     90 
    8291    def __del__(self): 
    8392        """Disconnects from the conference if the Jabber Client still exists""" 
     
    100109        return self.__super.Bid(subject, **UpdateDict) 
    101110         
     111    def _OnIQBrowseSets(self, subject, iq): 
     112        users = getattr(iq, 'user', []) + [user for conf in getattr(iq, 'conference', []) for users in getattr(iq, 'user', []) for user in users] 
     113 
     114        for user in users: 
     115            if getattr(user, 'type', '') == 'remove': 
     116                del self.roster[user.jid] 
     117            else:  
     118                self.roster[user.jid] = getattr(user, 'name', user.jid) 
     119 
    102120    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    103121    #~ Public Methods  
     
    131149    def ChangeNick(self, Nick, callback=None): 
    132150        """Changes the nickname of the conference connection""" 
    133         if not isinstance(Nick, (list, tuple)): Nick = (Nick,) 
    134         xmlNick = ''.join(['<nick>%s</nick>' % x for x in Nick]) 
    135         return self.JC().Query('jabber:iq:conference', toJID=self.ConferenceJID, type='set', xml=xmlNick, callback=callback) 
     151        newjid = self.ConferenceJID.join(self.ConferenceJID.split(1,3) + [Nick]) 
     152        return self.JC().Presence(newjid) 
    136153         
    137154    def Invite(self, *args, **kw): 
     
    140157        return self.JC().Message(*args, **kw) 
    141158 
    142     def Message(self, *args, **kw): 
     159    def Message(self, body='', subject='', type='groupchat', id=None, xml=''): 
    143160        """Sends a message to the conference""" 
    144         return self.JC().Message(self.ConferenceJID, *args, **kw
     161        return self.JC().Message(self.ConferenceJID, body=body, subject=subject, type=type, id=id, xml=xml
    145162 
    146163    def Presence(self, *args, **kw): 
     
    158175        for each in kw.itervalues(): 
    159176            print each._toXML() 
    160     jc = Client.Client('www.runeblade.com'
     177    jc = Client.Client('www.runeblade.com', fileIn=open('conf.in','w'), fileOut=open('conf.out','w')
    161178    jc.Authenticate('shane.test1', 'testing', 'PyConferenceTest') 
    162179    conf = Conference(jc, 'shane.conf@private.www.runeblade.com') 
    163180    conf.AddObserver('message', PrintStuff) 
    164181    conf.AddObserver('presence', PrintStuff) 
    165     conf.AddObserver('iq', PrintStuff) 
     182    #conf.AddObserver('iq', PrintStuff) 
    166183    conf.JoinAs('RuneBlade.Development') 
    167184    conf.Message('Hello from RB development!!!') 
     185    conf.ChangeNick('shane.test1') 
     186    conf.Message('Why, isnt this fun?') 
     187    conf.Invite('shane.holloway@www.runeblade.com', subject='Please join me!', body='Please join me in shane.conf@private.www.runeblade.com') 
    168188    jc.ProcessPending(1.0) 
    169189    try:  
  • trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py

    r164 r165  
    9191        return self._attributes.__getitem__(*args, **kw) 
    9292 
    93     def __setitem__(self, *args, **kw):  
    94         return self._attributes.__setitem__(*args, **kw) 
     93    def __setitem__(self, name, value):  
     94        result = self._attributes.__setitem__(name, value) 
     95        self.UpdateObservers(**{name: value}) 
     96        return result 
    9597 
    96     def __delitem__(self, *args, **kw):  
    97         return self._attributes.__delitem__(*args, **kw) 
     98    def __delitem__(self, name): 
     99        result = self._attributes.__delitem__(name) 
     100        self.UpdateObservers(**{name: None}) 
     101        return result 
    98102 
    99103    def __hash__(self): 
     
    101105 
    102106    def clear(self):  
    103         return self._attributes.clear() 
     107        UpdateDict = dict(map(None, self._attributes.keys(), tuple())) 
     108        result = self._attributes.clear() 
     109        self.UpdateObservers(**UpdateDict) 
     110        return result 
    104111 
    105112    def copy(self):  
     
    113120 
    114121    def popitem(self, *args, **kw):  
    115         return self._attributes.popitem(*args, **kw) 
     122        result = self._attributes.popitem(*args, **kw) 
     123        self.UpdateObservers(**{name:None}) 
     124        return result 
    116125 
    117     def setdefault(self, *args, **kw):  
    118         return self._attributes.setdefault(*args, **kw) 
     126    def setdefault(self, name, default): 
     127        if name not in self._attributes: 
     128            result = self._attributes.setdefault(name, default) 
     129            self.UpdateObservers(**{name:default}) 
     130        else: 
     131            result = self._attributes.get(name) 
     132        return result 
    119133 
    120     def update(self, *args, **kw):  
    121         return self._attributes.update(*args, **kw) 
     134    def update(self, other):  
     135        result = self._attributes.update(other) 
     136        self.UpdateObservers(**other) 
     137        return result 
    122138 
    123139    def keys(self):