summaryrefslogtreecommitdiff
path: root/src/room.py
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2011-11-06 03:41:00 +0100
committerFlorent Le Coz <louiz@louiz.org>2011-11-06 03:41:00 +0100
commitd76b37f825b53e0b55eb0f8d95c7f8eb7d3d7eff (patch)
tree426e51859068761c4252d302e51a8c8db456da5f /src/room.py
parent432afd6179e69b70b290fef68ea3bb263ff3b4c1 (diff)
parent9ff6380149980581bc74f33ddd0e38fb0627623b (diff)
downloadpoezio-d76b37f825b53e0b55eb0f8d95c7f8eb7d3d7eff.tar.gz
poezio-d76b37f825b53e0b55eb0f8d95c7f8eb7d3d7eff.tar.bz2
poezio-d76b37f825b53e0b55eb0f8d95c7f8eb7d3d7eff.tar.xz
poezio-d76b37f825b53e0b55eb0f8d95c7f8eb7d3d7eff.zip
Merge branch 'master' into plugins
Diffstat (limited to 'src/room.py')
-rw-r--r--src/room.py139
1 files changed, 0 insertions, 139 deletions
diff --git a/src/room.py b/src/room.py
deleted file mode 100644
index b97dd0b6..00000000
--- a/src/room.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# Copyright 2010-2011 Florent Le Coz <louiz@louiz.org>
-#
-# This file is part of Poezio.
-#
-# Poezio is free software: you can redistribute it and/or modify
-# it under the terms of the zlib license. See the COPYING file.
-
-from text_buffer import TextBuffer, Message
-from datetime import datetime
-from random import randrange
-from config import config
-from logger import logger
-
-import common
-from theming import get_theme
-
-import logging
-import curses
-
-log = logging.getLogger(__name__)
-
-class Room(TextBuffer):
- def __init__(self, name, nick, messages_nb_limit=config.get('max_messages_in_memory', 2048)):
- TextBuffer.__init__(self, messages_nb_limit)
- self.name = name
- self.own_nick = nick
- self.color_state = get_theme().COLOR_TAB_NORMAL # color used in RoomInfo
- self.joined = False # false until self presence is receied
- self.users = [] # User objects
- self.topic = ''
-
- def disconnect(self):
- """
- Set the state of the room as not joined, so
- we can know if we can join it, send messages to it, etc
- """
- self.users = []
- self.color_state = get_theme().COLOR_TAB_DISCONNECTED
- self.joined = False
-
- def get_single_line_topic(self):
- """
- Return the topic as a single-line string (for the window header)
- """
- return self.topic.replace('\n', '|')
-
- def log_message(self, txt, time, nickname):
- """
- Log the messages in the archives, if it needs
- to be
- """
- if time is None and self.joined: # don't log the history messages
- logger.log_message(self.name, nickname, txt)
-
- def do_highlight(self, txt, time, nickname):
- """
- Set the tab color and returns the nick color
- """
- color = None
- if not time and nickname and nickname != self.own_nick and self.joined:
- if self.own_nick.lower() in txt.lower():
- if self.color_state != get_theme().COLOR_TAB_CURRENT:
- self.set_color_state(get_theme().COLOR_TAB_HIGHLIGHT)
- color = get_theme().COLOR_HIGHLIGHT_NICK
- else:
- highlight_words = config.get('highlight_on', '').split(':')
- for word in highlight_words:
- if word and word.lower() in txt.lower():
- if self.color_state != get_theme().COLOR_TAB_CURRENT:
- self.set_color_state(get_theme().COLOR_TAB_HIGHLIGHT)
- color = get_theme().COLOR_HIGHLIGHT_NICK
- break
- if color:
- beep_on = config.get('beep_on', 'highlight private').split()
- if 'highlight' in beep_on and 'message' not in beep_on:
- curses.beep()
- return color
-
- def get_user_by_name(self, nick):
- """
- Gets the user associated with the given nick, or None if not found
- """
- for user in self.users:
- if user.nick == nick:
- return user
- return None
-
- def set_color_state(self, color):
- """
- Set the color that will be used to display the room's
- number in the RoomInfo window
- """
- self.color_state = color
-
- def add_message(self, txt, time=None, nickname=None, forced_user=None, nick_color=None, history=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)
- special_message = False
- if txt.startswith('/me '):
- txt = "\x192}* \x195}" + nickname + ' ' + txt[4:]
- special_message = True
- user = self.get_user_by_name(nickname) if nickname is not None else None
- if user:
- user.set_last_talked(datetime.now())
- if not user and forced_user:
- user = forced_user
- if not time and nickname and\
- nickname != self.own_nick and\
- self.color_state != get_theme().COLOR_TAB_CURRENT:
- if self.color_state != get_theme().COLOR_TAB_HIGHLIGHT:
- self.set_color_state(get_theme().COLOR_TAB_NEW_MESSAGE)
- nick_color = nick_color or None
- if not nickname or time:
- txt = '\x195}%s' % (txt,)
- else: # TODO
- highlight = self.do_highlight(txt, time, nickname)
- if highlight:
- nick_color = highlight
- if special_message:
- txt = '\x195}%s' % (txt,)
- nickname = None
- time = time or datetime.now()
- message = Message(txt='%s\x19o'%(txt.replace('\t', ' '),), nick_color=nick_color,
- time=time, str_time=time.strftime("%Y-%m-%d %H:%M:%S")\
- if history else time.strftime("%H:%M:%S"),\
- nickname=nickname, user=user)
- while len(self.messages) > self.messages_nb_limit:
- self.messages.pop(0)
- self.messages.append(message)
- for window in self.windows: # make the associated windows
- # build the lines from the new message
- nb = window.build_new_message(message, history=history)
- if window.pos != 0:
- window.scroll_up(nb)
- return nb