From 0c9c4edfa2ed213baf600957a05b3f54d395996b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sat, 1 Dec 2018 22:48:50 +0000 Subject: [PATCH 1/2] Allow additional information elements in MucInfoWin same as ConversationInfoWin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- poezio/tabs/muctab.py | 23 +++++++++++++++++++++-- poezio/windows/info_wins.py | 13 ++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) 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, From 7d0d4ddb517a27bf5e49a292dad6d70d97056a4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sat, 15 Dec 2018 20:55:54 +0000 Subject: [PATCH 2/2] Use additional info's value directly in MucInfoWin and ConversationInfoWin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- poezio/windows/info_wins.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poezio/windows/info_wins.py b/poezio/windows/info_wins.py index 2c0162b2..d1426e67 100644 --- a/poezio/windows/info_wins.py +++ b/poezio/windows/info_wins.py @@ -87,8 +87,8 @@ class PrivateInfoWin(InfoWin): Write all information added by plugins by getting the value returned by the callbacks. """ - for key in information: - self.addstr(information[key](jid), + for plugin in information.values(): + self.addstr(plugin(jid), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_room_name(self, name): @@ -277,8 +277,8 @@ class MucInfoWin(InfoWin): Write all information added by plugins by getting the value returned by the callbacks. """ - for key in information: - self.addstr(information[key](jid), + for plugin in information.values(): + self.addstr(plugin(jid), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_room_name(self, room):