Display the status change and/or disconnect for recent-speakers only. fixed #1288

parent a14611db
......@@ -38,11 +38,18 @@ after_completion = ,
# highlighted if said by someone on a room
highlight_on =
# if true, no join or quit message will be displayed in the rooms
hide_enter_join = False
# if true, no status change will be displayed in the rooms
hide_status_change = False
# Set a number for this setting.
# The join OR status-change notices will be
# displayed according to this number.
# -1: the notices will ALWAYS be displayed
# 0: the notices will NEVER be displayed
# n: On any other number, the notices will only be displayed
# if the user involved has talked since the last n seconds
# The join messages will be hidden only if hide_exit_join is 0
# if the value is incorrect, -1 is assumed
hide_exit_join = -1 # all quit and join notices will be displayed
hide_status_change = 120 # status changes won't be displayed unless
# the user talked since less than 2 minutes
# the full path to the photo (avatar) you want to use
# it should be less than 16Ko
......
......@@ -21,7 +21,7 @@ import sys
# disable any printout (this would mess the display)
# sys.stdout = open('/dev/null', 'w')
sys.stderr = open('debug', 'w')
sys.stderr = open('errors', 'w')
from connection import Connection
from multiuserchat import MultiUserChat
......
......@@ -59,7 +59,10 @@ class Config(RawConfigParser):
return self._get(option)
def getint(self, option):
return int(self._get(option))
try:
return int(self._get(option))
except ValueError:
return -1
def getfloat(self, option):
return float(self._get(option))
......
......@@ -118,9 +118,6 @@ class Gui(object):
try:
key = stdscr.getkey()
except:
debug("main_loop exception")
# self.window.resize(stdscr)
# self.window.refresh(self.rooms)
continue
if str(key) in self.key_func.keys():
self.key_func[key]()
......@@ -256,7 +253,7 @@ class Gui(object):
room.topic = subject.encode('utf-8').replace('\n', '|')
if room == self.current_room():
self.window.topic_win.refresh(room.topic)
else:
elif body:
if body.startswith('/me '):
self.add_info(room, nick_from + ' ' + body[4:], date)
else:
......@@ -292,7 +289,8 @@ class Gui(object):
# New user
if not user:
room.users.append(User(from_nick, affiliation, show, status, role))
if not config.get('hide_enter_join', "false") == "true":
hide_exit_join = config.get('hide_exit_join', -1)
if hide_exit_join != 0:
self.add_info(room, _('%(nick)s joined the room %(roomname)s') % {'nick':from_nick, 'roomname': room.name})
# nick change
elif change_nick:
......@@ -325,12 +323,21 @@ class Gui(object):
# user quit
elif status == 'offline' or role == 'none':
room.users.remove(user)
if not config.get('hide_enter_join', "false") == "true":
hide_exit_join = config.get('hide_exit_join', -1)\
if config.get('hide_exit_join', -1) >= -1\
else -1
if hide_exit_join == -1 or \
user.has_talked_since(hide_exit_join):
self.add_info(room, _('%s has left the room') % (from_nick))
# status change
else:
user.update(affiliation, show, status, role)
if not config.get('hide_status_change', "false") == "true":
hide_status_change = config.get('hide_status_change', -1)\
if config.get('hide_status_change', -1) >= -1\
else -1
if hide_status_change == -1 or \
user.has_talked_since(hide_status_change) or\
user.nick == room.own_nick:
self.add_info(room, _('%(nick)s changed his/her status : %(a)s, %(b)s, %(c)s, %(d)s') % {'nick':from_nick, 'a':affiliation, 'b':role, 'c':show, 'd':status})
if room == self.current_room():
self.window.user_win.refresh(room.users)
......@@ -464,6 +471,7 @@ class Gui(object):
if not r: # if the room window exists, we don't recreate it.
self.join_room(room, nick)
else:
r.own_nick = nick
r.users = []
def command_bookmark(self, args):
......
......@@ -53,11 +53,15 @@ class Room(object):
if word.lower() in msg.lower() and word != '':
self.set_color_state(13)
color = 3
break
if not msg:
logger.info('msg is None..., %s' % (nick))
return
self.lines.append((date, nick.encode('utf-8'),
msg.encode('utf-8'), color))
user = self.get_user_by_name(nick)
if user:
user.set_last_talked(date)
if self.joined: # log only NEW messages, not the history received on join
logger.message(self.name, nick.encode('utf-8'), msg.encode('utf-8'))
return color
......
......@@ -19,12 +19,14 @@
from random import randrange
from config import config
from datetime import timedelta, datetime
class User(object):
"""
keep trace of an user in a Room
"""
def __init__(self, nick, affiliation, show, status, role):
self.last_talked = None
self.update(affiliation, show, status, role)
self.change_nick(nick)
self.color = randrange(2, 10)
......@@ -37,3 +39,23 @@ class User(object):
def change_nick(self, nick):
self.nick = nick.encode('utf-8')
def set_last_talked(self, time):
"""
time: datetime object
"""
self.last_talked = time
def has_talked_since(self, t):
"""
get a int
Return True if the user talked since the last s seconds
"""
from common import debug
if self.last_talked is None:
return False
delta = timedelta(0, t)
debug("Last talk: %s\nDelai:%s\nDelta:%s\n" % (str(self.last_talked), str(t), str(delta)))
if datetime.now() - delta > self.last_talked:
return False
return True
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment