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,
)
from poezio.ui.types import Message, InfoMessage
from poezio.ui.types import (
Message,
InfoMessage,
PersistentInfoMessage,
)
log = logging.getLogger(__name__)
@ -1328,7 +1332,7 @@ class Core:
"""
tab = self.tabs.by_name_and_class(jid, tabs.ConversationTab)
if tab is not None:
tab.add_message(InfoMessage(msg), typ=2)
tab.add_message(PersistentInfoMessage(msg))
if self.tabs.current_tab is tab:
self.refresh_window()
@ -1743,12 +1747,11 @@ class Core:
nickname='Error',
nick_color=get_theme().COLOR_ERROR_MSG,
),
typ=2,
)
code = error['error']['code']
if code == '401':
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 config.getstr('alternative_nickname') != '':
if not tab.joined:
@ -1757,11 +1760,10 @@ class Core:
else:
if not tab.joined:
tab.add_message(
InfoMessage(
PersistentInfoMessage(
'You can join the room with another nick, '
'by typing "/join /other_nick"'
),
typ=2,
)
)
self.refresh_window()

View file

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

View file

@ -11,13 +11,14 @@ conversations and roster changes
import mmap
import re
from typing import List, Dict, Optional, IO, Any
from typing import List, Dict, Optional, IO, Any, Union
from datetime import datetime
from poezio import common
from poezio.config import config
from poezio.xhtml import clean_text
from poezio.theming import dump_tuple, get_theme
from poezio.ui.types import Message, BaseMessage, LoggableTrait
import logging
@ -134,10 +135,7 @@ class Logger:
def log_message(self,
jid: str,
nick: str,
msg: str,
date: Optional[datetime] = None,
typ: int = 1) -> bool:
msg: Union[BaseMessage, Message]) -> bool:
"""
log the message in the appropriate jid's file
type:
@ -147,7 +145,16 @@ class Logger:
"""
if not config.get_by_tabname('use_log', jid):
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:
return True
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.user import User
from poezio.ui.funcs import truncate_nick
from poezio.ui.types import BaseMessage, InfoMessage, Message
from poezio.timed_events import DelayedEvent
from poezio.ui.types import (
BaseMessage,
Message,
PersistentInfoMessage,
LoggableTrait,
)
from slixmpp import JID, InvalidJID, Message as SMessage
@ -580,6 +585,11 @@ class ChatTab(Tab):
else:
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
def jid(self) -> JID:
return copy(self._jid)
@ -595,22 +605,17 @@ class ChatTab(Tab):
def general_jid(self) -> JID:
raise NotImplementedError
def log_message(self, message: BaseMessage, typ: int = 1):
def log_message(self, message: BaseMessage):
"""
Log the messages in the archives.
"""
name = self.jid.bare
if not isinstance(message, Message):
if not isinstance(message, LoggableTrait):
return
was_logged = logger.log_message(
name, message.nickname or '', message.txt,
date=message.time, typ=typ
)
if not was_logged:
if not logger.log_message(self.log_name, message):
self.core.information('Unable to write in the log file', 'Error')
def add_message(self, message: BaseMessage, typ=1):
self.log_message(message, typ=typ)
def add_message(self, message: BaseMessage):
self.log_message(message)
self._text_buffer.add_message(message)
def modify_message(self,
@ -627,7 +632,7 @@ class ChatTab(Tab):
txt, old_id, new_id, user=user, jid=jid, time=time
)
if message:
self.log_message(message, typ=1)
self.log_message(message)
self.text_win.modify_message(message.identifier, message)
self.core.refresh_window()
return True
@ -1025,8 +1030,7 @@ class OneToOneTab(ChatTab):
if status.show in SHOW_NAME:
msg += 'show: %s, ' % SHOW_NAME[status.show]
self.add_message(
InfoMessage(txt=msg[:-2]),
typ=2,
PersistentInfoMessage(txt=msg[:-2])
)
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)
if status else '',
)
self.add_message(InfoMessage(msg), typ=0)
self.add_message(InfoMessage(msg))
self.core.refresh_window()
self.core.xmpp.plugin['xep_0012'].get_last_activity(
@ -206,15 +206,12 @@ class ConversationTab(OneToOneTab):
'status': status,
}
),
typ=0,
)
return True
else:
self.add_message(
InfoMessage("No information available"),
typ=0,
)
return True
self.add_message(
InfoMessage("No information available"),
)
return True
@command_args_parser.quoted(0, 1)
async def command_version(self, args):

View file

@ -29,6 +29,7 @@ from typing import (
Tuple,
Union,
Set,
Type,
Pattern,
TYPE_CHECKING,
)
@ -58,6 +59,8 @@ from poezio.ui.types import (
Message,
MucOwnJoinMessage,
MucOwnLeaveMessage,
StatusMessage,
PersistentInfoMessage,
)
if TYPE_CHECKING:
@ -220,7 +223,7 @@ class MucTab(ChatTab):
'color_spec': spec_col,
'nick': self.own_nick,
}
self.add_message(MucOwnLeaveMessage(msg), typ=2)
self.add_message(MucOwnLeaveMessage(msg))
self.disconnect()
muc.leave_groupchat(self.core.xmpp, self.jid.bare, self.own_nick,
message)
@ -343,7 +346,7 @@ class MucTab(ChatTab):
'role': user.role or 'None',
'status': '\n%s' % user.status if user.status else ''
}
self.add_message(InfoMessage(info), typ=0)
self.add_message(InfoMessage(info))
return True
def change_topic(self, topic: str) -> None:
@ -374,7 +377,6 @@ class MucTab(ChatTab):
"The subject of the room is: \x19%s}%s %s" %
(norm_text, self.topic, user_string),
),
typ=0,
)
@refresh_wrapper.always
@ -576,12 +578,11 @@ class MucTab(ChatTab):
'nick_col': color,
'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)
if 201 in status_codes:
self.add_message(
InfoMessage('Info: The room has been created'),
typ=0
PersistentInfoMessage('Info: The room has been created'),
)
if 170 in status_codes:
self.add_message(
@ -590,9 +591,9 @@ class MucTab(ChatTab):
' This room is publicly logged' % {
'info_col': info_col,
'warn_col': warn_col
},
}
),
typ=0)
)
if 100 in status_codes:
self.add_message(
InfoMessage(
@ -602,7 +603,7 @@ class MucTab(ChatTab):
'warn_col': warn_col
},
),
typ=0)
)
mam.schedule_tab_open(self)
def handle_presence_joined(self, presence: Presence, status_codes: Set[int]) -> None:
@ -664,8 +665,8 @@ class MucTab(ChatTab):
MucOwnLeaveMessage(
'You have been kicked because you '
'are not a member and the room is now members-only.'
),
typ=2)
)
)
self.disconnect()
def on_muc_shutdown(self) -> None:
@ -674,8 +675,8 @@ class MucTab(ChatTab):
MucOwnLeaveMessage(
'You have been kicked because the'
' MUC service is shutting down.'
),
typ=2)
)
)
self.disconnect()
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),
'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)
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"
info_col = dump_tuple(get_theme().COLOR_INFORMATION_TEXT)
self.add_message(
InfoMessage(
PersistentInfoMessage(
'\x19%(old_color)s}%(old)s\x19%(info_col)s} is'
' now known as \x19%(color)s}%(new)s' % {
'old': from_nick,
@ -756,8 +757,8 @@ class MucTab(ChatTab):
'old_color': old_color,
'info_col': info_col
},
),
typ=2)
)
)
# rename the private tabs if needed
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
"""
cls = InfoMessage
cls: Type[InfoMessage] = PersistentInfoMessage
self.users.remove(user)
by = presence.xml.find('{%s}x/{%s}item/{%s}actor' %
(NS_MUC_USER, NS_MUC_USER, NS_MUC_USER))
@ -842,13 +843,13 @@ class MucTab(ChatTab):
'reason': reason.text,
'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:
"""
When someone is kicked from a muc
"""
cls = InfoMessage
cls: Type[InfoMessage] = PersistentInfoMessage
self.users.remove(user)
actor_elem = presence.xml.find('{%s}x/{%s}item/{%s}actor' %
(NS_MUC_USER, NS_MUC_USER, NS_MUC_USER))
@ -922,7 +923,7 @@ class MucTab(ChatTab):
'reason': reason.text,
'info_col': info_col
}
self.add_message(cls(kick_msg), typ=2)
self.add_message(cls(kick_msg))
def on_user_leave_groupchat(self,
user: User,
@ -987,7 +988,7 @@ class MucTab(ChatTab):
}
if status:
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)
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', '|')
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]:
"""
Gets the user associated with the given nick, or None if not found
@ -1093,12 +1082,12 @@ class MucTab(ChatTab):
return user
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"""
# reset self-ping interval
if self.self_ping_event:
self.enable_self_ping_event()
super().add_message(msg, typ=typ)
super().add_message(msg)
if not isinstance(msg, Message):
return
if msg.user:
@ -1130,7 +1119,7 @@ class MucTab(ChatTab):
user=user,
jid=jid)
if message:
self.log_message(message, typ=1)
self.log_message(message)
self.text_win.modify_message(message.identifier, message)
return highlight
return False
@ -1585,7 +1574,7 @@ class MucTab(ChatTab):
buff.append('\n')
message = ' '.join(buff)
self.add_message(InfoMessage(message), typ=0)
self.add_message(InfoMessage(message))
self.text_win.refresh()
self.input.refresh()

View file

@ -26,7 +26,12 @@ from poezio.decorators import refresh_wrapper
from poezio.logger import logger
from poezio.theming import get_theme, dump_tuple
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__)
@ -66,6 +71,11 @@ class PrivateTab(OneToOneTab):
self.update_commands()
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):
user = self.parent_muc.get_user_by_name(self.jid.resource)
if user:
@ -102,16 +112,6 @@ class PrivateTab(OneToOneTab):
def remove_information_element(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):
super().on_close()
self.parent_muc.privates.remove(self)
@ -306,7 +306,7 @@ class PrivateTab(OneToOneTab):
display a message.
"""
self.add_message(
InfoMessage(
PersistentInfoMessage(
'\x19%(nick_col)s}%(old)s\x19%(info_col)s} is now '
'known as \x19%(nick_col)s}%(new)s' % {
'old': old_nick,
@ -315,7 +315,7 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(get_theme().COLOR_INFORMATION_TEXT)
},
),
typ=2)
)
new_jid = self.jid.bare + '/' + user.nick
self.name = new_jid
return self.core.tabs.current_tab is self
@ -335,7 +335,7 @@ class PrivateTab(OneToOneTab):
if not status_message:
self.add_message(
InfoMessage(
PersistentInfoMessage(
'\x19%(quit_col)s}%(spec)s \x19%(nick_col)s}'
'%(nick)s\x19%(info_col)s} has left the room' % {
'nick': user.nick,
@ -345,10 +345,10 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT)
},
),
typ=2)
)
else:
self.add_message(
InfoMessage(
PersistentInfoMessage(
'\x19%(quit_col)s}%(spec)s \x19%(nick_col)s}'
'%(nick)s\x19%(info_col)s} has left the room'
' (%(status)s)' % {
@ -360,7 +360,7 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT)
},
),
typ=2)
)
return self.core.tabs.current_tab is self
@refresh_wrapper.conditional
@ -378,7 +378,7 @@ class PrivateTab(OneToOneTab):
if user:
color = dump_tuple(user.color)
self.add_message(
InfoMessage(
PersistentInfoMessage(
'\x19%(join_col)s}%(spec)s \x19%(color)s}%(nick)s\x19'
'%(info_col)s} joined the room' % {
'nick': nick,
@ -388,18 +388,18 @@ class PrivateTab(OneToOneTab):
'info_col': dump_tuple(theme.COLOR_INFORMATION_TEXT)
},
),
typ=2)
)
return self.core.tabs.current_tab is self
def activate(self, reason=None):
self.on = True
if reason:
self.add_message(InfoMessage(reason), typ=2)
self.add_message(PersistentInfoMessage(reason))
def deactivate(self, reason=None):
self.on = False
if reason:
self.add_message(InfoMessage(reason), typ=2)
self.add_message(PersistentInfoMessage(reason))
def matching_names(self):
return [(3, self.jid.resource), (4, self.name)]
@ -415,6 +415,5 @@ class PrivateTab(OneToOneTab):
nickname='Error',
nick_color=theme.COLOR_ERROR_MSG,
),
typ=2,
)
self.core.refresh_window()

View file

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

View file

@ -7,7 +7,6 @@ from poezio import poopt
from poezio.user import User
from poezio.theming import dump_tuple, get_theme
class BaseMessage:
__slots__ = ('txt', 'time', 'identifier')
@ -34,11 +33,20 @@ class InfoMessage(BaseMessage):
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"""
class MucOwnJoinMessage(InfoMessage):
class MucOwnJoinMessage(InfoMessage, LoggableTrait):
"""Status message displayed on our room join"""
@ -93,7 +101,7 @@ class StatusMessage(BaseMessage):
self.txt = self.format_string.format(**real_args)
class Message(BaseMessage):
class Message(BaseMessage, LoggableTrait):
__slots__ = ('nick_color', 'nickname', 'user', 'delayed', 'history',
'top', 'highlight', 'me', 'old_message', 'revisions',
'jid', 'ack')