primitivus: code factorization for user notification
This commit is contained in:
parent
9c2087847a
commit
ed7fd60e98
1 changed files with 20 additions and 24 deletions
|
|
@ -262,60 +262,56 @@ class Chat(urwid.WidgetWrap, QuickChat):
|
|||
def printMessage(self, from_jid, msg, profile, timestamp=""):
|
||||
assert isinstance(from_jid, JID)
|
||||
try:
|
||||
jid,nick,mymess = QuickChat.printMessage(self, from_jid, msg, profile, timestamp)
|
||||
jid, nick, mymess = QuickChat.printMessage(self, from_jid, msg, profile, timestamp)
|
||||
except TypeError:
|
||||
return
|
||||
|
||||
new_text = ChatText(self, timestamp or None, nick, mymess, msg)
|
||||
|
||||
if timestamp and self.content:
|
||||
for idx in range(len(self.content)-1,-1,-1):
|
||||
for idx in range(len(self.content) - 1, -1, -1):
|
||||
current_text = self.content[idx]
|
||||
if new_text.timestamp < current_text.timestamp and idx > 0:
|
||||
continue #the new message is older, we need to insert it upper
|
||||
continue # the new message is older, we need to insert it upper
|
||||
|
||||
#we discard double messages, to avoid backlog / history conflict
|
||||
if ((idx and self.content[idx-1].message == msg) or
|
||||
if ((idx and self.content[idx - 1].message == msg) or
|
||||
(self.content[idx].message == msg) or
|
||||
(idx<len(self.content)-2 and self.content[idx+1].message)):
|
||||
(idx < len(self.content) - 2 and self.content[idx + 1].message)):
|
||||
return
|
||||
|
||||
self.content.insert(idx+1, new_text)
|
||||
self.content.insert(idx + 1, new_text)
|
||||
break
|
||||
else:
|
||||
self.content.append(new_text)
|
||||
self._notify(from_jid, msg)
|
||||
|
||||
if self.text_list.get_focus()[1] == len(self.content)-2:
|
||||
#we don't change focus if user is not at the bottom
|
||||
#as that mean that he is probably watching discussion history
|
||||
self.text_list.set_focus(len(self.content)-1)
|
||||
self.host.redraw()
|
||||
if not self.host.x_notify.hasFocus():
|
||||
if self.type=="one2one":
|
||||
self.host.x_notify.sendNotification(_("Primitivus: %s is talking to you") % from_jid)
|
||||
elif self.getUserNick().lower() in msg.lower():
|
||||
self.host.x_notify.sendNotification(_("Primitivus: Somebody pinged your name in %s room") % self.target)
|
||||
|
||||
def printInfo(self, msg, type='normal', timestamp=""):
|
||||
def printInfo(self, msg, type_='normal', timestamp=""):
|
||||
"""Print general info
|
||||
@param msg: message to print
|
||||
@type: one of:
|
||||
normal: general info like "toto has joined the room"
|
||||
me: "/me" information like "/me clenches his fist" ==> "toto clenches his fist"
|
||||
"""
|
||||
#FIXME: duplicated code, this must be refactored
|
||||
_widget = ChatText(self, timestamp or None, None, False, msg, is_info=True)
|
||||
self.content.append(_widget)
|
||||
if self.text_list.get_focus()[1] == len(self.content)-2:
|
||||
self._notify(msg=msg)
|
||||
|
||||
def _notify(self, from_jid="somebody", msg=""):
|
||||
"""Notify the user of a new message if primitivus doesn't have the focus.
|
||||
@param from_jid: contact who wrote to the users
|
||||
@param msg: the message that has been received
|
||||
"""
|
||||
if self.text_list.get_focus()[1] == len(self.content) - 2:
|
||||
#we don't change focus if user is not at the bottom
|
||||
#as that mean that he is probably watching discussion history
|
||||
self.text_list.set_focus(len(self.content)-1)
|
||||
self.text_list.set_focus(len(self.content) - 1)
|
||||
self.host.redraw()
|
||||
if not self.host.x_notify.hasFocus():
|
||||
if self.type=="one2one":
|
||||
self.host.x_notify.sendNotification(_("Primitivus: there is a message about you"))
|
||||
if self.type == "one2one":
|
||||
self.host.x_notify.sendNotification(_("Primitivus: %s is talking to you") % from_jid)
|
||||
elif self.getUserNick().lower() in msg.lower():
|
||||
self.host.x_notify.sendNotification(_("Primitivus: Somebody is talking about you in %s room") % self.target)
|
||||
self.host.x_notify.sendNotification(_("Primitivus: %s mentioned you in room '%s'") % (from_jid, self.target))
|
||||
|
||||
def startGame(self, game_type, referee, players):
|
||||
"""Configure the chat window to start a game"""
|
||||
|
|
|
|||
Loading…
Reference in a new issue