Changeset 111:a51e5d87ded8 for wokkel/muc.py
- Timestamp:
- Oct 3, 2008, 8:50:37 PM (14 years ago)
- Branch:
- wokkel-muc-client-support-24
- Convert:
- svn:b33ecbfc-034c-dc11-8662-000475d9059e/branches/wokkel-muc-client-support-24@72
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
wokkel/muc.py
r110 r111 30 30 NS_CONFIG = NS + '#roomconfig' 31 31 NS_REQUEST = NS + '#request' 32 NS_REGISTER = NS + '#register' 32 33 33 34 NS_DELAY = 'urn:xmpp:delay' 35 NS_REQUEST = 'jabber:iq:register' 34 36 35 37 # ad hoc commands … … 138 140 139 141 142 class RegisterRequest(xmlstream.IQ): 143 """ 144 Register room request. 145 146 @ivar namespace: Request namespace. 147 @type namespace: C{str} 148 @ivar method: Type attribute of the IQ request. Either C{'set'} or C{'get'} 149 @type method: C{str} 150 """ 151 152 def __init__(self, xs, method='get', fields=[]): 153 xmlstream.IQ.__init__(self, xs, method) 154 q = self.addElement((NS_REQUEST, 'query')) 155 if method == 'set': 156 # build data form 157 form_type = 'submit' 158 form = data_form.Form(form_type, formNamespace=NS_REGISTER) 159 q.addChild(form.toElement()) 160 161 for f in fields: 162 # create a field 163 form.addField(f) 164 140 165 class GroupChat(domish.Element): 141 166 """ … … 177 202 178 203 179 class BasicPresence(xmppim. Presence):204 class BasicPresence(xmppim.AvailablePresence): 180 205 """ 181 206 This behaves like an object providing L{domish.IElement}. … … 183 208 """ 184 209 185 def __init__(self, to=None, type=None): 186 xmppim.Presence.__init__(self, to, type) 187 210 def __init__(self, to=None, show=None, statuses=None): 211 xmppim.AvailablePresence.__init__(self, to=to, show=show, statuses=statuses) 188 212 # add muc elements 189 213 x = self.addElement('x', NS) … … 229 253 self.addChild(form.toElement()) 230 254 231 class PresenceError( BasicPresence):255 class PresenceError(xmppim.Presence): 232 256 """ 233 257 This behaves like an object providing L{domish.IElement}. … … 236 260 237 261 def __init__(self, error, to=None, frm=None): 238 BasicPresence.__init__(self, to, type='error')262 xmppim.Presence.__init__(self, to, type='error') 239 263 if frm: 240 264 self['from'] = frm … … 266 290 return self.rooms.get(room_jid.full().lower()) 267 291 292 def _removeRoom(self, room_jid): 293 if self.rooms.has_key(room_jid.full().lower()): 294 del self.rooms[room_jid.full().lower()] 268 295 269 296 def _onXPresence(self, prs): … … 306 333 r = self._getRoom(room_jid) 307 334 if r is None: 308 raise 335 raise Exception, 'Room Not Found' 309 336 r.state = 'joined' 310 337 … … 316 343 d.callback(r) 317 344 345 346 def _leftRoom(self, d, prs): 347 """We have presence that says we joined a room. 348 """ 349 room_jid = jid.internJID(prs['from']) 350 351 # check for errors 352 if prs.hasAttribute('type') and prs['type'] == 'error': 353 d.errback(prs) 354 else: 355 # change the state of the room 356 r = self._getRoom(room_jid) 357 if r is None: 358 raise Exception, 'Room Not Found' 359 self._removeRoom(room_jid) 360 361 d.callback(True) 362 318 363 def receivedUserPresence(self, prs): 319 364 """User Presence has been received … … 342 387 343 388 344 def configure(self, room_jid, **kwargs):389 def configure(self, room_jid, fields=[]): 345 390 """Configure a room 346 391 """ 347 request = ConfigureRequest(self.xmlstream, method='set', **kwargs)392 request = ConfigureRequest(self.xmlstream, method='set', fields=fields) 348 393 request['to'] = room_jid 349 394 … … 374 419 375 420 421 422 def leave(self, room_jid): 423 """ 424 """ 425 d = defer.Deferred() 426 427 self._getRoom(room_jid) 428 429 p = xmppim.UnavailablePresence(to=r.entity_id) 430 # p['from'] = self.jid.full() 431 self.xmlstream.send(p) 432 433 # add observer for joining the room 434 self.xmlstream.addOnetimeObserver(PRESENCE+"[@from='%s' and type='unavailable']" % (r.entity_id.full()), 435 self._leftRoom, 1, d) 436 437 return d 438 439 440 441 376 442 def groupChat(self, to, message, children=None): 377 443 """Send a groupchat message … … 386 452 387 453 454 def register(self, to, fields=[]): 455 iq = RegisterRequest(self.xmlstream, method='set', fields=fields) 456 iq['to'] = to 457 return iq.send() 458 459 def getRegisterForm(self, to): 460 iq = RegisterRequest(self.xmlstream) 461 iq['to'] = to 462 return iq.send() 463 388 464 def subject(self, to, subject): 389 465 """
Note: See TracChangeset
for help on using the changeset viewer.