comparison sat_frontends/quick_frontend/quick_chat.py @ 2850:272dc905ff20

quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
author Goffi <goffi@goffi.org>
date Sun, 10 Mar 2019 18:03:02 +0100
parents c2858e63cd82
children 7764383a968c
comparison
equal deleted inserted replaced
2849:c2858e63cd82 2850:272dc905ff20
431 """set the whole list of occupants""" 431 """set the whole list of occupants"""
432 assert len(self.occupants) == 0 432 assert len(self.occupants) == 0
433 for nick, data in occupants.iteritems(): 433 for nick, data in occupants.iteritems():
434 self.occupants[nick] = Occupant(self, data, self.profile) 434 self.occupants[nick] = Occupant(self, data, self.profile)
435 435
436 def updateOccupants(self, occupants):
437 """Update occupants list
438
439 In opposition to setOccupants, this only add missing occupants and remove
440 occupants who have left
441 """
442 # FIXME: occupants with modified status are not handled
443 local_occupants = set(self.occupants)
444 updated_occupants = set(occupants)
445 left_occupants = local_occupants - updated_occupants
446 joined_occupants = updated_occupants - local_occupants
447 log.debug(u"updating occupants for {room}:\n"
448 u"left: {left_occupants}\n"
449 u"joined: {joined_occupants}"
450 .format(room=self.target,
451 left_occupants=u", ".join(left_occupants),
452 joined_occupants=u", ".join(joined_occupants)))
453 for nick in left_occupants:
454 self.removeUser(occupants[nick])
455 for nick in joined_occupants:
456 self.addUser(occupants[nick])
457
436 def addUser(self, occupant_data): 458 def addUser(self, occupant_data):
437 """Add user if it is not in the group list""" 459 """Add user if it is not in the group list"""
438 occupant = Occupant(self, occupant_data, self.profile) 460 occupant = Occupant(self, occupant_data, self.profile)
439 self.occupants[occupant.nick] = occupant 461 self.occupants[occupant.nick] = occupant
440 return occupant 462 return occupant