summaryrefslogtreecommitdiff
path: root/src/room.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/room.py')
-rw-r--r--src/room.py66
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