diff options
Diffstat (limited to 'src/room.py')
-rw-r--r-- | src/room.py | 66 |
1 files changed, 42 insertions, 24 deletions
diff --git a/src/room.py b/src/room.py index a5134122..b7cb8ed3 100644 --- a/src/room.py +++ b/src/room.py @@ -22,6 +22,8 @@ from config import config from logging import logger from message import Message +import common + class Room(object): """ """ @@ -30,7 +32,7 @@ class Room(object): self.jid = jid # used for a private chat. None if it's a MUC self.name = name self.own_nick = nick - self.color_state = 11 # color used in RoomInfo + self.color_state = common.ROOM_STATE_NONE # color used in RoomInfo self.nb = Room.number # number used in RoomInfo Room.number += 1 self.joined = False # false until self presence is received @@ -40,60 +42,77 @@ class Room(object): self.window = window self.pos = 0 # offset - def scroll_up(self, y_x): + def scroll_up(self, y_x, dist=14): y, x = y_x if len(self.messages) <= y: return - self.pos += 14 + self.pos += dist if self.pos + y >= len(self.messages): self.pos = len(self.messages) - y+3 - def scroll_down(self): - self.pos -= 14 + def scroll_down(self, dist=14): + self.pos -= dist if self.pos <= 0: self.pos = 0 def disconnect(self): self.joined = False - def add_message(self, txt, time=None, nickname=None): + def log_message(self, txt, time, nickname): """ - Note that user can be None even if nickname is not None. It happens - when we receive an history message said by someone who is not - in the room anymore + Log the messages in the archives, if it needs + to be """ if time == None and self.joined: # don't log the history messages logger.message(self.name, nickname, txt) - user = self.get_user_by_name(nickname) if nickname is not None else None - if user: - user.set_last_talked(datetime.now()) + + def do_highlight(self, txt, time, nickname): + """ + Set the tab color and returns the txt color + """ color = None - if not time and nickname is not None: - if not self.jid: - self.set_color_state(12) - else: - self.set_color_state(15) - else: - color = 8 if not time and nickname != self.own_nick and self.joined and nickname is not None: # do the highlight try: if self.own_nick.encode('utf-8') in txt: self.set_color_state(13) - color = 3 + color = 2 except UnicodeDecodeError: try: if self.own_nick in txt: self.set_color_state(13) - color = 3 + color = 2 except: pass else: highlight_words = config.get('highlight_on', '').split(':') for word in highlight_words: if word.lower() in txt.lower() and word != '': - self.set_color_state(13) + self.set_color_state(common.ROOM_STATE_HL) color = 2 break + return color + + def add_message(self, txt, time=None, nickname=None): + """ + Note that user can be None even if nickname is not None. It happens + when we receive an history message said by someone who is not + in the room anymore + """ + self.log_message(txt, time, nickname) + user = self.get_user_by_name(nickname) if nickname is not None else None + if user: + user.set_last_talked(datetime.now()) + color = None + if not time and nickname is not None and\ + nickname != self.own_nick and\ + self.color_state != common.ROOM_STATE_CURRENT: + if not self.jid: + self.set_color_state(common.ROOM_STATE_MESSAGE) + else: + self.set_color_state(common.ROOM_STATE_PRIVATE) + color = self.do_highlight(txt, time, nickname) + if time: # History messages are colored to be distinguished + color = 8 time = time if time is not None else datetime.now() self.messages.append(Message(txt, time, nickname, user, color)) @@ -108,5 +127,4 @@ class Room(object): Set the color that will be used to display the room's number in the RoomInfo window """ - if self.color_state < color or color == 11: - self.color_state = color + self.color_state = color |