diff --git a/poezio/tabs/muctab.py b/poezio/tabs/muctab.py index bc82b2fe..54795bc3 100644 --- a/poezio/tabs/muctab.py +++ b/poezio/tabs/muctab.py @@ -52,6 +52,7 @@ class MucTab(ChatTab): message_type = 'groupchat' plugin_commands = {} # type: Dict[str, Command] plugin_keys = {} # type: Dict[str, Callable] + additional_information = {} # type: Dict[str, Callable[[str], str]] def __init__(self, core, jid, nick, password=None): ChatTab.__init__(self, core, jid) @@ -106,6 +107,20 @@ class MucTab(ChatTab): return last_message.time return None + @staticmethod + def add_information_element(plugin_name: str, callback: Callable[[str], str]) -> None: + """ + Lets a plugin add its own information to the MucInfoWin + """ + MucTab.additional_information[plugin_name] = callback + + @staticmethod + def remove_information_element(plugin_name: str) -> None: + """ + Lets a plugin add its own information to the MucInfoWin + """ + del MucTab.additional_information[plugin_name] + def cancel_config(self, form): """ The user do not want to send his/her config, send an iq cancel @@ -440,7 +455,9 @@ class MucTab(ChatTab): if self.core.tabs.current_tab is self: self.text_win.refresh() self.user_win.refresh_if_changed(self.users) - self.info_header.refresh(self, self.text_win, user=self.own_user) + self.info_header.refresh( + self, self.text_win, user=self.own_user, + information=MucTab.additional_information) self.input.refresh() self.core.doupdate() @@ -1225,7 +1242,9 @@ class MucTab(ChatTab): if display_user_list: self.v_separator.refresh() self.user_win.refresh(self.users) - self.info_header.refresh(self, self.text_win, user=self.own_user) + self.info_header.refresh( + self, self.text_win, user=self.own_user, + information=MucTab.additional_information) self.refresh_tab_win() if display_info_win: self.info_win.refresh() diff --git a/poezio/windows/info_wins.py b/poezio/windows/info_wins.py index 0a8f0f27..2c0162b2 100644 --- a/poezio/windows/info_wins.py +++ b/poezio/windows/info_wins.py @@ -257,7 +257,7 @@ class MucInfoWin(InfoWin): def __init__(self): InfoWin.__init__(self) - def refresh(self, room, window=None, user=None): + def refresh(self, room, window=None, user=None, information=None): log.debug('Refresh: %s', self.__class__.__name__) self._win.erase() self.write_room_name(room) @@ -265,11 +265,22 @@ class MucInfoWin(InfoWin): self.write_own_nick(room) self.write_disconnected(room) self.write_role(room, user) + if information: + self.write_additional_information(information, room) if window: self.print_scroll_position(window) self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() + def write_additional_information(self, information, jid): + """ + Write all information added by plugins by getting the + value returned by the callbacks. + """ + for key in information: + self.addstr(information[key](jid), + to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + def write_room_name(self, room): self.addstr('[', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) self.addstr(room.name,