Mercurial > libervia-backend
diff frontends/src/primitivus/chat.py @ 1966:d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 20 Jun 2016 19:19:16 +0200 |
parents | a2bc5089c2eb |
children | de6faf9be715 |
line wrap: on
line diff
--- a/frontends/src/primitivus/chat.py Mon Jun 20 18:44:27 2016 +0200 +++ b/frontends/src/primitivus/chat.py Mon Jun 20 19:19:16 2016 +0200 @@ -189,6 +189,7 @@ def __init__(self, host, target, type_=C.CHAT_ONE2ONE, occupants=None, subject=None, profiles=None): quick_chat.QuickChat.__init__(self, host, target, type_, occupants, subject, profiles=profiles) + self.filters = [] # list of filter callbacks to apply self.mess_walker = urwid.SimpleListWalker([]) self.mess_widgets = urwid.ListBox(self.mess_walker) self.chat_widget = urwid.Frame(self.mess_widgets) @@ -268,6 +269,24 @@ self.host.addMenus(menu, C.MENU_SINGLE, {'jid': full_jid}) return menu + def setFilter(self, args): + """set filtering of messages + + @param args(list[unicode]): filters following syntax "[filter]=[value]" + empty list to clear all filters + only lang=XX is handled for now + """ + if args: + if args[0].startswith("lang="): + lang = args[0][5:].strip() + self.filters.append(lambda mess_data: lang in mess_data.message) + else: + del self.filters[:] + + del self.mess_walker[:] + for message in self.messages.itervalues(): + self.appendMessage(message) + def presenceListener(self, entity, show, priority, statuses, profile): """Update entity's presence status @@ -307,6 +326,9 @@ Can merge messages together is desirable (e.g.: multiple joined/leave) @param message(quick_chat.Message): message to add """ + if self.filters: + if not all([f(message) for f in self.filters]): + return if self._user_moved(message): for wid in reversed(self.mess_walker): # we merge in/out messages if no message was sent meanwhile