logging: Remove the "typ" passing when adding or logging messages

This commit is contained in:
mathieui 2020-05-31 23:14:39 +02:00
parent bbc22fc8bc
commit f56811d546
9 changed files with 137 additions and 127 deletions

View file

@ -71,7 +71,11 @@ from poezio.core.structs import (
POSSIBLE_SHOW, POSSIBLE_SHOW,
) )
from poezio.ui.types import Message, InfoMessage from poezio.ui.types import (
Message,
InfoMessage,
PersistentInfoMessage,
)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -1328,7 +1332,7 @@ class Core:
""" """
tab = self.tabs.by_name_and_class(jid, tabs.ConversationTab) tab = self.tabs.by_name_and_class(jid, tabs.ConversationTab)
if tab is not None: if tab is not None:
tab.add_message(InfoMessage(msg), typ=2) tab.add_message(PersistentInfoMessage(msg))
if self.tabs.current_tab is tab: if self.tabs.current_tab is tab:
self.refresh_window() self.refresh_window()
@ -1743,12 +1747,11 @@ class Core:
nickname='Error', nickname='Error',
nick_color=get_theme().COLOR_ERROR_MSG, nick_color=get_theme().COLOR_ERROR_MSG,
), ),
typ=2,
) )
code = error['error']['code'] code = error['error']['code']
if code == '401': if code == '401':
msg = 'To provide a password in order to join the room, type "/join / password" (replace "password" by the real password)' msg = 'To provide a password in order to join the room, type "/join / password" (replace "password" by the real password)'
tab.add_message(InfoMessage(msg), typ=2) tab.add_message(PersistentInfoMessage(msg))
if code == '409': if code == '409':
if config.getstr('alternative_nickname') != '': if config.getstr('alternative_nickname') != '':
if not tab.joined: if not tab.joined:
@ -1757,11 +1760,10 @@ class Core:
else: else:
if not tab.joined: if not tab.joined:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'You can join the room with another nick, ' 'You can join the room with another nick, '
'by typing "/join /other_nick"' 'by typing "/join /other_nick"'
), )
typ=2,
) )
self.refresh_window() self.refresh_window()

View file

@ -38,7 +38,13 @@ from poezio.logger import logger
from poezio.roster import roster from poezio.roster import roster
from poezio.text_buffer import CorrectionError, AckError from poezio.text_buffer import CorrectionError, AckError
from poezio.theming import dump_tuple, get_theme from poezio.theming import dump_tuple, get_theme
from poezio.ui.types import XMLLog, Message as PMessage, BaseMessage, InfoMessage from poezio.ui.types import (
XMLLog,
Message as PMessage,
BaseMessage,
InfoMessage,
PersistentInfoMessage,
)
from poezio.core.commands import dumb_callback from poezio.core.commands import dumb_callback
@ -318,7 +324,7 @@ class HandlerCore:
error = '\x19%s}%s\x19o' % (dump_tuple(get_theme().COLOR_CHAR_NACK), error = '\x19%s}%s\x19o' % (dump_tuple(get_theme().COLOR_CHAR_NACK),
error_msg) error_msg)
if not tab.nack_message('\n' + error, message['id'], message['to']): if not tab.nack_message('\n' + error, message['id'], message['to']):
tab.add_message(InfoMessage(error), typ=0) tab.add_message(InfoMessage(error))
self.core.refresh_window() self.core.refresh_window()
def on_normal_message(self, message): def on_normal_message(self, message):
@ -421,8 +427,7 @@ class HandlerCore:
history=delayed, history=delayed,
identifier=message['id'], identifier=message['id'],
jid=jid, jid=jid,
), )
typ=1,
) )
if not own and 'private' in config.getlist('beep_on'): if not own and 'private' in config.getlist('beep_on'):
@ -627,7 +632,7 @@ class HandlerCore:
identifier=message['id'], identifier=message['id'],
) )
typ = 2 typ = 2
tab.add_message(ui_msg, typ) tab.add_message(ui_msg)
if highlight: if highlight:
self.core.events.trigger('highlight', message, tab) self.core.events.trigger('highlight', message, tab)
@ -723,8 +728,7 @@ class HandlerCore:
user=user, user=user,
identifier=message['id'], identifier=message['id'],
jid=message['from'], jid=message['from'],
), )
typ=1,
) )
if sent: if sent:
tab.set_last_sent_message(message, correct=replaced) tab.set_last_sent_message(message, correct=replaced)
@ -1214,53 +1218,53 @@ class HandlerCore:
if show_unavailable or hide_unavailable or non_priv or logging_off\ if show_unavailable or hide_unavailable or non_priv or logging_off\
or non_anon or semi_anon or full_anon: or non_anon or semi_anon or full_anon:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'Info: A configuration change not privacy-related occurred.' 'Info: A configuration change not privacy-related occurred.'
), ),
typ=2) )
modif = True modif = True
if show_unavailable: if show_unavailable:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'Info: The unavailable members are now shown.' 'Info: The unavailable members are now shown.'
), ),
typ=2) )
elif hide_unavailable: elif hide_unavailable:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'Info: The unavailable members are now hidden.', 'Info: The unavailable members are now hidden.',
), ),
typ=2) )
if non_anon: if non_anon:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'\x191}Warning:\x19%(info_col)s} The room is now not anonymous. (public JID)' % info_col '\x191}Warning:\x19%(info_col)s} The room is now not anonymous. (public JID)' % info_col
), ),
typ=2) )
elif semi_anon: elif semi_anon:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'Info: The room is now semi-anonymous. (moderators-only JID)', 'Info: The room is now semi-anonymous. (moderators-only JID)',
), ),
typ=2) )
elif full_anon: elif full_anon:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'Info: The room is now fully anonymous.', 'Info: The room is now fully anonymous.',
), ),
typ=2) )
if logging_on: if logging_on:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'\x191}Warning: \x19%(info_col)s}This room is publicly logged' % info_col '\x191}Warning: \x19%(info_col)s}This room is publicly logged' % info_col
), ),
typ=2) )
elif logging_off: elif logging_off:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
'Info: This room is not logged anymore.', 'Info: This room is not logged anymore.',
), ),
typ=2) )
if modif: if modif:
self.core.refresh_window() self.core.refresh_window()
@ -1303,18 +1307,18 @@ class HandlerCore:
if nick_from: if nick_from:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
"%(user)s set the subject to: \x19%(text_col)s}%(subject)s" % fmt, "%(user)s set the subject to: \x19%(text_col)s}%(subject)s" % fmt,
time=time, time=time,
), ),
typ=2) )
else: else:
tab.add_message( tab.add_message(
InfoMessage( PersistentInfoMessage(
"The subject is: \x19%(text_col)s}%(subject)s" % fmt, "The subject is: \x19%(text_col)s}%(subject)s" % fmt,
time=time, time=time,
), ),
typ=2) )
tab.topic = subject tab.topic = subject
tab.topic_from = nick_from tab.topic_from = nick_from
if self.core.tabs.by_name_and_class( if self.core.tabs.by_name_and_class(

View file

@ -11,13 +11,14 @@ conversations and roster changes
import mmap import mmap
import re import re
from typing import List, Dict, Optional, IO, Any from typing import List, Dict, Optional, IO, Any, Union
from datetime import datetime from datetime import datetime
from poezio import common from poezio import common
from poezio.config import config from poezio.config import config
from poezio.xhtml import clean_text from poezio.xhtml import clean_text
from poezio.theming import dump_tuple, get_theme from poezio.theming import dump_tuple, get_theme
from poezio.ui.types import Message, BaseMessage, LoggableTrait
import logging import logging
@ -134,10 +135,7 @@ class Logger:
def log_message(self, def log_message(self,
jid: str, jid: str,
nick: str, msg: Union[BaseMessage, Message]) -> bool:
msg: str,
date: Optional[datetime] = None,
typ: int = 1) -> bool:
""" """
log the message in the appropriate jid's file log the message in the appropriate jid's file
type: type:
@ -147,7 +145,16 @@ class Logger:
""" """
if not config.get_by_tabname('use_log', jid): if not config.get_by_tabname('use_log', jid):
return True return True
logged_msg = build_log_message(nick, msg, date=date, typ=typ) if not isinstance(msg, LoggableTrait):
return True
date = msg.time
txt = msg.txt
typ = 2
nick = ''
if isinstance(msg, Message):
nick = msg.nickname or ''
typ = 1
logged_msg = build_log_message(nick, txt, date=date, typ=typ)
if not logged_msg: if not logged_msg:
return True return True
jid = str(jid).replace('/', '\\') jid = str(jid).replace('/', '\\')

View file

@ -49,8 +49,13 @@ from poezio.text_buffer import TextBuffer
from poezio.theming import get_theme, dump_tuple from poezio.theming import get_theme, dump_tuple
from poezio.user import User from poezio.user import User
from poezio.ui.funcs import truncate_nick from poezio.ui.funcs import truncate_nick
from poezio.ui.types import BaseMessage, InfoMessage, Message
from poezio.timed_events import DelayedEvent from poezio.timed_events import DelayedEvent
from poezio.ui.types import (
BaseMessage,
Message,
PersistentInfoMessage,
LoggableTrait,
)
from slixmpp import JID, InvalidJID, Message as SMessage from slixmpp import JID, InvalidJID, Message as SMessage
@ -580,6 +585,11 @@ class ChatTab(Tab):
else: else:
raise TypeError("Name %r must be of type JID or str." % value) raise TypeError("Name %r must be of type JID or str." % value)
@property
def log_name(self) -> str:
"""Name used for the log filename"""
return self.jid.bare
@property @property
def jid(self) -> JID: def jid(self) -> JID:
return copy(self._jid) return copy(self._jid)
@ -595,22 +605,17 @@ class ChatTab(Tab):
def general_jid(self) -> JID: def general_jid(self) -> JID:
raise NotImplementedError raise NotImplementedError
def log_message(self, message: BaseMessage, typ: int = 1): def log_message(self, message: BaseMessage):
""" """
Log the messages in the archives. Log the messages in the archives.
""" """
name = self.jid.bare if not isinstance(message, LoggableTrait):
if not isinstance(message, Message):
return return
was_logged = logger.log_message( if not logger.log_message(self.log_name, message):
name, message.nickname or '', message.txt,
date=message.time, typ=typ
)
if not was_logged:
self.core.information('Unable to write in the log file', 'Error') self.core.information('Unable to write in the log file', 'Error')
def add_message(self, message: BaseMessage, typ=1): def add_message(self, message: BaseMessage):
self.log_message(message, typ=typ) self.log_message(message)
self._text_buffer.add_message(message) self._text_buffer.add_message(message)
def modify_message(self, def modify_message(self,
@ -627,7 +632,7 @@ class ChatTab(Tab):
txt, old_id, new_id, user=user, jid=jid, time=time txt, old_id, new_id, user=user, jid=jid, time=time
) )
if message: if message:
self.log_message(message, typ=1) self.log_message(message)
self.text_win.modify_message(message.identifier, message) self.text_win.modify_message(message.identifier, message)
self.core.refresh_window() self.core.refresh_window()
return True return True
@ -1025,8 +1030,7 @@ class OneToOneTab(ChatTab):
if status.show in SHOW_NAME: if status.show in SHOW_NAME:
msg += 'show: %s, ' % SHOW_NAME[status.show] msg += 'show: %s, ' % SHOW_NAME[status.show]
self.add_message( self.add_message(
InfoMessage(txt=msg[:-2]), PersistentInfoMessage(txt=msg[:-2])
typ=2,
) )
def ack_message(self, msg_id: str, msg_jid: JID): def ack_message(self, msg_id: str, msg_jid: JID):

View file

@ -178,7 +178,7 @@ class ConversationTab(OneToOneTab):
(' and their last status was %s' % status) (' and their last status was %s' % status)
if status else '', if status else '',
) )
self.add_message(InfoMessage(msg), typ=0) self.add_message(InfoMessage(msg))
self.core.refresh_window() self.core.refresh_window()
self.core.xmpp.plugin['xep_0012'].get_last_activity( self.core.xmpp.plugin['xep_0012'].get_last_activity(
@ -206,15 +206,12 @@ class ConversationTab(OneToOneTab):
'status': status, 'status': status,
} }
), ),
typ=0,
)
return True
else:
self.add_message(
InfoMessage("No information available"),
typ=0,
) )
return True return True
self.add_message(
InfoMessage("No information available"),
)
return True
@command_args_parser.quoted(0, 1) @command_args_parser.quoted(0, 1)
async def command_version(self, args): async def command_version(self, args):

View file

@ -29,6 +29,7 @@ from typing import (
Tuple, Tuple,
Union, Union,
Set, Set,
Type,
Pattern, Pattern,
TYPE_CHECKING, TYPE_CHECKING,
) )
@ -58,6 +59,8 @@ from poezio.ui.types import (
Message, Message,
MucOwnJoinMessage, MucOwnJoinMessage,
MucOwnLeaveMessage, MucOwnLeaveMessage,
StatusMessage,
PersistentInfoMessage,
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@ -220,7 +223,7 @@ class MucTab(ChatTab):
'color_spec': spec_col, 'color_spec': spec_col,
'nick': self.own_nick, 'nick': self.own_nick,
} }
self.add_message(MucOwnLeaveMessage(msg), typ=2) self.add_message(MucOwnLeaveMessage(msg))
self.disconnect() self.disconnect()
muc.leave_groupchat(self.core.xmpp, self.jid.bare, self.own_nick, muc.leave_groupchat(self.core.xmpp, self.jid.bare, self.own_nick,
message) message)
@ -343,7 +346,7 @@ class MucTab(ChatTab):
'role': user.role or 'None', 'role': user.role or 'None',
'status': '\n%s' % user.status if user.status else '' 'status': '\n%s' % user.status if user.status else ''
} }
self.add_message(InfoMessage(info), typ=0) self.add_message(InfoMessage(info))
return True return True
def change_topic(self, topic: str) -> None: def change_topic(self, topic: str) -> None:
@ -374,7 +377,6 @@ class MucTab(ChatTab):
"The subject of the room is: \x19%s}%s %s" % "The subject of the room is: \x19%s}%s %s" %
(norm_text, self.topic, user_string), (norm_text, self.topic, user_string),
), ),
typ=0,
) )
@refresh_wrapper.always @refresh_wrapper.always
@ -576,12 +578,11 @@ class MucTab(ChatTab):
'nick_col': color, 'nick_col': color,
'info_col': info_col, 'info_col': info_col,
} }
self.add_message(MucOwnJoinMessage(enable_message), typ=2) self.add_message(MucOwnJoinMessage(enable_message))
self.core.enable_private_tabs(self.jid.bare, enable_message) self.core.enable_private_tabs(self.jid.bare, enable_message)
if 201 in status_codes: if 201 in status_codes:
self.add_message( self.add_message(
InfoMessage('Info: The room has been created'), PersistentInfoMessage('Info: The room has been created'),
typ=0
) )
if 170 in status_codes: if 170 in status_codes:
self.add_message( self.add_message(
@ -590,9 +591,9 @@ class MucTab(ChatTab):
' This room is publicly logged' % { ' This room is publicly logged' % {
'info_col': info_col, 'info_col': info_col,
'warn_col': warn_col 'warn_col': warn_col
}, }
), ),
typ=0) )
if 100 in status_codes: if 100 in status_codes:
self.add_message( self.add_message(
InfoMessage( InfoMessage(
@ -602,7 +603,7 @@ class MucTab(ChatTab):
'warn_col': warn_col 'warn_col': warn_col
}, },
), ),
typ=0) )
mam.schedule_tab_open(self) mam.schedule_tab_open(self)
def handle_presence_joined(self, presence: Presence, status_codes: Set[int]) -> None: def handle_presence_joined(self, presence: Presence, status_codes: Set[int]) -> None:
@ -664,8 +665,8 @@ class MucTab(ChatTab):
MucOwnLeaveMessage( MucOwnLeaveMessage(
'You have been kicked because you ' 'You have been kicked because you '
'are not a member and the room is now members-only.' 'are not a member and the room is now members-only.'
), )
typ=2) )
self.disconnect() self.disconnect()
def on_muc_shutdown(self) -> None: def on_muc_shutdown(self) -> None:
@ -674,8 +675,8 @@ class MucTab(ChatTab):
MucOwnLeaveMessage( MucOwnLeaveMessage(
'You have been kicked because the' 'You have been kicked because the'
' MUC service is shutting down.' ' MUC service is shutting down.'
), )
typ=2) )
self.disconnect() self.disconnect()
def on_user_join(self, from_nick: str, affiliation: str, show: str, status: str, role: str, jid: JID, def on_user_join(self, from_nick: str, affiliation: str, show: str, status: str, role: str, jid: JID,
@ -719,7 +720,7 @@ class MucTab(ChatTab):
'jid_color': dump_tuple(theme.COLOR_MUC_JID), 'jid_color': dump_tuple(theme.COLOR_MUC_JID),
'color_spec': spec_col, 'color_spec': spec_col,
} }
self.add_message(InfoMessage(msg), typ=2) self.add_message(PersistentInfoMessage(msg))
self.core.on_user_rejoined_private_conversation(self.jid.bare, from_nick) self.core.on_user_rejoined_private_conversation(self.jid.bare, from_nick)
def on_user_nick_change(self, presence: Presence, user: User, from_nick: str) -> None: def on_user_nick_change(self, presence: Presence, user: User, from_nick: str) -> None:
@ -747,7 +748,7 @@ class MucTab(ChatTab):
old_color = color = "3" old_color = color = "3"
info_col = dump_tuple(get_theme().COLOR_INFORMATION_TEXT) info_col = dump_tuple(get_theme().COLOR_INFORMATION_TEXT)
self.add_message( self.add_message(
InfoMessage( PersistentInfoMessage(
'\x19%(old_color)s}%(old)s\x19%(info_col)s} is' '\x19%(old_color)s}%(old)s\x19%(info_col)s} is'
' now known as \x19%(color)s}%(new)s' % { ' now known as \x19%(color)s}%(new)s' % {
'old': from_nick, 'old': from_nick,
@ -756,8 +757,8 @@ class MucTab(ChatTab):
'old_color': old_color, 'old_color': old_color,
'info_col': info_col 'info_col': info_col
}, },
), )
typ=2) )
# rename the private tabs if needed # rename the private tabs if needed
self.core.rename_private_tabs(self.jid.bare, from_nick, user) self.core.rename_private_tabs(self.jid.bare, from_nick, user)
@ -765,7 +766,7 @@ class MucTab(ChatTab):
""" """
When someone is banned from a muc When someone is banned from a muc
""" """
cls = InfoMessage cls: Type[InfoMessage] = PersistentInfoMessage
self.users.remove(user) self.users.remove(user)
by = presence.xml.find('{%s}x/{%s}item/{%s}actor' % by = presence.xml.find('{%s}x/{%s}item/{%s}actor' %
(NS_MUC_USER, NS_MUC_USER, NS_MUC_USER)) (NS_MUC_USER, NS_MUC_USER, NS_MUC_USER))
@ -842,13 +843,13 @@ class MucTab(ChatTab):
'reason': reason.text, 'reason': reason.text,
'info_col': info_col 'info_col': info_col
} }
self.add_message(cls(kick_msg), typ=2) self.add_message(cls(kick_msg))
def on_user_kicked(self, presence: Presence, user: User, from_nick: str) -> None: def on_user_kicked(self, presence: Presence, user: User, from_nick: str) -> None:
""" """
When someone is kicked from a muc When someone is kicked from a muc
""" """
cls = InfoMessage cls: Type[InfoMessage] = PersistentInfoMessage
self.users.remove(user) self.users.remove(user)
actor_elem = presence.xml.find('{%s}x/{%s}item/{%s}actor' % actor_elem = presence.xml.find('{%s}x/{%s}item/{%s}actor' %
(NS_MUC_USER, NS_MUC_USER, NS_MUC_USER)) (NS_MUC_USER, NS_MUC_USER, NS_MUC_USER))
@ -922,7 +923,7 @@ class MucTab(ChatTab):
'reason': reason.text, 'reason': reason.text,
'info_col': info_col 'info_col': info_col
} }
self.add_message(cls(kick_msg), typ=2) self.add_message(cls(kick_msg))
def on_user_leave_groupchat(self, def on_user_leave_groupchat(self,
user: User, user: User,
@ -987,7 +988,7 @@ class MucTab(ChatTab):
} }
if status: if status:
leave_msg += ' (\x19o%s\x19%s})' % (status, info_col) leave_msg += ' (\x19o%s\x19%s})' % (status, info_col)
self.add_message(InfoMessage(leave_msg), typ=2) self.add_message(PersistentInfoMessage(leave_msg))
self.core.on_user_left_private_conversation(from_room, user, status) self.core.on_user_left_private_conversation(from_room, user, status)
def on_user_change_status(self, user: User, from_nick: str, from_room: str, affiliation: str, def on_user_change_status(self, user: User, from_nick: str, from_room: str, affiliation: str,
@ -1072,18 +1073,6 @@ class MucTab(ChatTab):
""" """
return self.topic.replace('\n', '|') return self.topic.replace('\n', '|')
def log_message(self, msg: BaseMessage, typ: int = 1) -> None:
"""
Log the messages in the archives, if it needs
to be
"""
if not isinstance(msg, Message):
return
if not msg.history and self.joined and msg.nickname and msg.txt: # don't log the history messages
if not logger.log_message(self.jid.bare, msg.nickname, msg.txt, typ=typ):
self.core.information('Unable to write in the log file',
'Error')
def get_user_by_name(self, nick: str) -> Optional[User]: def get_user_by_name(self, nick: str) -> Optional[User]:
""" """
Gets the user associated with the given nick, or None if not found Gets the user associated with the given nick, or None if not found
@ -1093,12 +1082,12 @@ class MucTab(ChatTab):
return user return user
return None return None
def add_message(self, msg: BaseMessage, typ: int = 1) -> None: def add_message(self, msg: BaseMessage) -> None:
"""Add a message to the text buffer and set various tab status""" """Add a message to the text buffer and set various tab status"""
# reset self-ping interval # reset self-ping interval
if self.self_ping_event: if self.self_ping_event:
self.enable_self_ping_event() self.enable_self_ping_event()
super().add_message(msg, typ=typ) super().add_message(msg)
if not isinstance(msg, Message): if not isinstance(msg, Message):
return return
if msg.user: if msg.user:
@ -1130,7 +1119,7 @@ class MucTab(ChatTab):
user=user, user=user,
jid=jid) jid=jid)
if message: if message:
self.log_message(message, typ=1) self.log_message(message)
self.text_win.modify_message(message.identifier, message) self.text_win.modify_message(message.identifier, message)
return highlight return highlight
return False return False
@ -1585,7 +1574,7 @@ class MucTab(ChatTab):
buff.append('\n') buff.append('\n')
message = ' '.join(buff) message = ' '.join(buff)
self.add_message(InfoMessage(message), typ=0) self.add_message(InfoMessage(message))
self.text_win.refresh() self.text_win.refresh()
self.input.refresh() self.input.refresh()

View file

@ -26,7 +26,12 @@ from poezio.decorators import refresh_wrapper
from poezio.logger import logger from poezio.logger import logger
from poezio.theming import get_theme, dump_tuple from poezio.theming import get_theme, dump_tuple
from poezio.decorators import command_args_parser from poezio.decorators import command_args_parser
from poezio.ui.types import BaseMessage, Message, InfoMessage from poezio.ui.types import (
BaseMessage,
InfoMessage,
Message,
PersistentInfoMessage,
)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -66,6 +71,11 @@ class PrivateTab(OneToOneTab):
self.update_commands() self.update_commands()
self.update_keys() self.update_keys()
@property
def log_name(self) -> str:
"""Overriden from ChatTab because this is a case where we want the full JID"""
return self.jid.full
def remote_user_color(self): def remote_user_color(self):
user = self.parent_muc.get_user_by_name(self.jid.resource) user = self.parent_muc.get_user_by_name(self.jid.resource)
if user: if user:
@ -102,16 +112,6 @@ class PrivateTab(OneToOneTab):
def remove_information_element(plugin_name): def remove_information_element(plugin_name):
del PrivateTab.additional_information[plugin_name] del PrivateTab.additional_information[plugin_name]
def log_message(self, msg: BaseMessage, typ=1):
"""
Log the messages in the archives.
"""
if not isinstance(msg, Message):
return
if not logger.log_message(
self.jid.full, msg.nickname or '', msg.txt or '', date=msg.time, typ=typ):
self.core.information('Unable to write in the log file', 'Error')
def on_close(self): def on_close(self):
super().on_close() super().on_close()
self.parent_muc.privates.remove(self) self.parent_muc.privates.remove(self)
@ -306,7 +306,7 @@ class PrivateTab(OneToOneTab):
display a message. display a message.
""" """
self.add_message( self.add_message(
InfoMessage( PersistentInfoMessage(
'\x19%(nick_col)s}%(old)s\x19%(info_col)s} is now ' '\x19%(nick_col)s}%(old)s\x19%(info_col)s} is now '
'known as \x19%(nick_col)s}%(new)s' % { 'known as \x19%(nick_col)s}%(new)s' % {
'old': old_nick, 'old': old_nick,
@ -315,7 +315,7 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(get_theme().COLOR_INFORMATION_TEXT) 'info_col': dump_tuple(get_theme().COLOR_INFORMATION_TEXT)
}, },
), ),
typ=2) )
new_jid = self.jid.bare + '/' + user.nick new_jid = self.jid.bare + '/' + user.nick
self.name = new_jid self.name = new_jid
return self.core.tabs.current_tab is self return self.core.tabs.current_tab is self
@ -335,7 +335,7 @@ class PrivateTab(OneToOneTab):
if not status_message: if not status_message:
self.add_message( self.add_message(
InfoMessage( PersistentInfoMessage(
'\x19%(quit_col)s}%(spec)s \x19%(nick_col)s}' '\x19%(quit_col)s}%(spec)s \x19%(nick_col)s}'
'%(nick)s\x19%(info_col)s} has left the room' % { '%(nick)s\x19%(info_col)s} has left the room' % {
'nick': user.nick, 'nick': user.nick,
@ -345,10 +345,10 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT) 'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT)
}, },
), ),
typ=2) )
else: else:
self.add_message( self.add_message(
InfoMessage( PersistentInfoMessage(
'\x19%(quit_col)s}%(spec)s \x19%(nick_col)s}' '\x19%(quit_col)s}%(spec)s \x19%(nick_col)s}'
'%(nick)s\x19%(info_col)s} has left the room' '%(nick)s\x19%(info_col)s} has left the room'
' (%(status)s)' % { ' (%(status)s)' % {
@ -360,7 +360,7 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT) 'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT)
}, },
), ),
typ=2) )
return self.core.tabs.current_tab is self return self.core.tabs.current_tab is self
@refresh_wrapper.conditional @refresh_wrapper.conditional
@ -378,7 +378,7 @@ class PrivateTab(OneToOneTab):
if user: if user:
color = dump_tuple(user.color) color = dump_tuple(user.color)
self.add_message( self.add_message(
InfoMessage( PersistentInfoMessage(
'\x19%(join_col)s}%(spec)s \x19%(color)s}%(nick)s\x19' '\x19%(join_col)s}%(spec)s \x19%(color)s}%(nick)s\x19'
'%(info_col)s} joined the room' % { '%(info_col)s} joined the room' % {
'nick': nick, 'nick': nick,
@ -388,18 +388,18 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT) 'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT)
}, },
), ),
typ=2) )
return self.core.tabs.current_tab is self return self.core.tabs.current_tab is self
def activate(self, reason=None): def activate(self, reason=None):
self.on = True self.on = True
if reason: if reason:
self.add_message(InfoMessage(reason), typ=2) self.add_message(PersistentInfoMessage(reason))
def deactivate(self, reason=None): def deactivate(self, reason=None):
self.on = False self.on = False
if reason: if reason:
self.add_message(InfoMessage(reason), typ=2) self.add_message(PersistentInfoMessage(reason))
def matching_names(self): def matching_names(self):
return [(3, self.jid.resource), (4, self.name)] return [(3, self.jid.resource), (4, self.name)]
@ -415,6 +415,5 @@ class PrivateTab(OneToOneTab):
nickname='Error', nickname='Error',
nick_color=theme.COLOR_ERROR_MSG, nick_color=theme.COLOR_ERROR_MSG,
), ),
typ=2,
) )
self.core.refresh_window() self.core.refresh_window()

View file

@ -364,7 +364,7 @@ class RosterInfoTab(Tab):
'info_col': dump_tuple(get_theme().COLOR_INFORMATION_TEXT), 'info_col': dump_tuple(get_theme().COLOR_INFORMATION_TEXT),
'jid': message['from'], 'jid': message['from'],
} }
tab.add_message(InfoMessage(message), typ=0) tab.add_message(InfoMessage(message))
@command_args_parser.ignored @command_args_parser.ignored
async def command_list_blocks(self): async def command_list_blocks(self):

View file

@ -7,7 +7,6 @@ from poezio import poopt
from poezio.user import User from poezio.user import User
from poezio.theming import dump_tuple, get_theme from poezio.theming import dump_tuple, get_theme
class BaseMessage: class BaseMessage:
__slots__ = ('txt', 'time', 'identifier') __slots__ = ('txt', 'time', 'identifier')
@ -34,11 +33,20 @@ class InfoMessage(BaseMessage):
super().__init__(txt=txt, identifier=identifier, time=time) super().__init__(txt=txt, identifier=identifier, time=time)
class MucOwnLeaveMessage(InfoMessage): class LoggableTrait:
"""Trait for classes of messages that should go through the logger"""
pass
class PersistentInfoMessage(InfoMessage, LoggableTrait):
pass
class MucOwnLeaveMessage(InfoMessage, LoggableTrait):
"""Status message displayed on our room leave/kick/ban""" """Status message displayed on our room leave/kick/ban"""
class MucOwnJoinMessage(InfoMessage): class MucOwnJoinMessage(InfoMessage, LoggableTrait):
"""Status message displayed on our room join""" """Status message displayed on our room join"""
@ -93,7 +101,7 @@ class StatusMessage(BaseMessage):
self.txt = self.format_string.format(**real_args) self.txt = self.format_string.format(**real_args)
class Message(BaseMessage): class Message(BaseMessage, LoggableTrait):
__slots__ = ('nick_color', 'nickname', 'user', 'delayed', 'history', __slots__ = ('nick_color', 'nickname', 'user', 'delayed', 'history',
'top', 'highlight', 'me', 'old_message', 'revisions', 'top', 'highlight', 'me', 'old_message', 'revisions',
'jid', 'ack') 'jid', 'ack')