From 93d4e5129648800294f85cc9c57adab255908a6e Mon Sep 17 00:00:00 2001 From: lovetox <philipp@hoerist.com> Date: Thu, 30 Jul 2020 18:54:30 +0200 Subject: [PATCH] Contacts: Add can_notify() method for group chats --- gajim/chat_control_base.py | 4 ++-- gajim/common/connection_handlers_events.py | 5 +++-- gajim/common/contacts.py | 8 ++++++++ gajim/common/helpers.py | 6 ------ gajim/groupchat_control.py | 4 ++-- gajim/gtk/util.py | 9 +++++---- gajim/gui_interface.py | 2 +- gajim/message_window.py | 7 +++---- gajim/remote_control.py | 6 +++++- gajim/roster_window.py | 4 +++- gajim/session.py | 8 ++++++-- 11 files changed, 38 insertions(+), 25 deletions(-) diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py index 25ce7ba4a6..bb4bd4a59d 100644 --- a/gajim/chat_control_base.py +++ b/gajim/chat_control_base.py @@ -1138,7 +1138,7 @@ def add_message(self, if kind == 'incoming': if (not self._type.is_groupchat or - helpers.notify_for_muc(jid) or + self.contact.can_notify() or 'marked' in other_tags_for_text): # it's a normal message, or a muc message with want to be # notified about if quitting just after @@ -1176,7 +1176,7 @@ def add_message(self, event = 'message_received' show_in_roster = get_show_in_roster(event, self.session) show_in_systray = get_show_in_systray( - event_type.type_, self.contact.jid) + event_type.type_, self.account, self.contact.jid) event = event_type(text, subject, diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py index 1619b95026..b495ceea7f 100644 --- a/gajim/common/connection_handlers_events.py +++ b/gajim/common/connection_handlers_events.py @@ -305,8 +305,9 @@ def handle_incoming_gc_msg_event(self, msg_obj): self.control_focused = self.control.has_focus() if app.config.get('notify_on_new_message'): - notify_for_muc = (helpers.notify_for_muc(self.jid) or - sound == 'highlight') + contact = app.contacts.get_groupchat_contact(self.account, + self.jid) + notify_for_muc = sound == 'highlight' or contact.can_notify() if not notify_for_muc: self.do_popup = False diff --git a/gajim/common/contacts.py b/gajim/common/contacts.py index edcb10b159..5b69917235 100644 --- a/gajim/common/contacts.py +++ b/gajim/common/contacts.py @@ -243,6 +243,14 @@ def is_transport(self): # if not '@' or '@' starts the jid then contact is transport return self.jid.find('@') <= 0 + def can_notify(self): + if not self.is_groupchat: + raise ValueError + + all_ = app.config.get('notify_on_all_muc_messages') + room = app.config.get_per('rooms', self.jid, 'notify_on_all_messages') + return all_ or room + class GC_Contact(CommonContact): """ diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py index c2aa9fba5b..631c79c20f 100644 --- a/gajim/common/helpers.py +++ b/gajim/common/helpers.py @@ -1434,9 +1434,3 @@ def should_log(account, jid): no_log_for = no_log_for.split() return (account not in no_log_for) and (jid not in no_log_for) - - -def notify_for_muc(room): - all_ = app.config.get('notify_on_all_muc_messages') - room = app.config.get_per('rooms', room, 'notify_on_all_messages') - return all_ or room diff --git a/gajim/groupchat_control.py b/gajim/groupchat_control.py index 6f7294f70a..aba80c1959 100644 --- a/gajim/groupchat_control.py +++ b/gajim/groupchat_control.py @@ -962,7 +962,7 @@ def add_message(self, text, contact='', tim=None, def get_nb_unread(self): type_events = ['printed_marked_gc_msg'] - if helpers.notify_for_muc(self.room_jid): + if self.contact.can_notify(): type_events.append('printed_gc_msg') nb = len(app.events.get_events(self.account, self.room_jid, @@ -984,7 +984,7 @@ def highlighting_for_message(self, text, tim): """ highlight, sound = None, None - notify = helpers.notify_for_muc(self.room_jid) + notify = self.contact.can_notify() message_sound_enabled = app.config.get_per('soundevents', 'muc_message_received', 'enabled') diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index e598442c52..de48a39dc7 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -48,7 +48,6 @@ from gajim.common import i18n from gajim.common.i18n import _ from gajim.common.helpers import URL_REGEX -from gajim.common.helpers import notify_for_muc from gajim.common.const import MOODS from gajim.common.const import ACTIVITIES from gajim.common.const import LOCATION_DATA @@ -497,12 +496,14 @@ def get_show_in_roster(event, session=None): return True -def get_show_in_systray(type_, jid): +def get_show_in_systray(type_, account, jid): """ Return True if this event must be shown in systray, else False """ - notify = notify_for_muc(jid) - if type_ == 'printed_gc_msg' and not notify: + if type_ == 'printed_gc_msg': + contact = app.contacts.get_groupchat_contact(account, jid) + if contact is not None: + return contact.can_notify() # it's not an highlighted message, don't show in systray return False return app.config.get('trayicon_notification_on_events') diff --git a/gajim/gui_interface.py b/gajim/gui_interface.py index 4b84e1dade..54b707e8f0 100644 --- a/gajim/gui_interface.py +++ b/gajim/gui_interface.py @@ -1058,7 +1058,7 @@ def add_event(self, account, jid, event): 'file-completed': 'ft_finished'} event_type = event_types.get(event.type_) show_in_roster = get_show_in_roster(event_type, jid) - show_in_systray = get_show_in_systray(event_type, jid) + show_in_systray = get_show_in_systray(event_type, account, jid) event.show_in_roster = show_in_roster event.show_in_systray = show_in_systray app.events.add_event(account, jid, event) diff --git a/gajim/message_window.py b/gajim/message_window.py index e3d2413c3a..026f57c95c 100644 --- a/gajim/message_window.py +++ b/gajim/message_window.py @@ -36,7 +36,6 @@ from gajim.common import ged from gajim.common.i18n import Q_ from gajim.common.i18n import _ -from gajim.common.helpers import notify_for_muc from gajim.common.nec import EventHelper from gajim import gtkgui_helpers @@ -492,8 +491,8 @@ def show_title(self, urgent=True, control=None): unread = 0 for ctrl in self.controls(): if (ctrl.is_groupchat and - not notify_for_muc(ctrl.room_jid) and - not ctrl.attention_flag): + not ctrl.contact.can_notify() and + not ctrl.attention_flag): # count only pm messages unread += ctrl.get_nb_unread_pm() continue @@ -510,7 +509,7 @@ def show_title(self, urgent=True, control=None): if control.is_groupchat: name = control.contact.get_shown_name() urgent = (control.attention_flag or - notify_for_muc(control.room_jid)) + control.contact.can_notify()) else: name = control.contact.get_shown_name() if control.resource: diff --git a/gajim/remote_control.py b/gajim/remote_control.py index e9345c1f34..f8204e22b4 100644 --- a/gajim/remote_control.py +++ b/gajim/remote_control.py @@ -884,8 +884,12 @@ def _contacts_as_dbus_structure(self, contacts): def get_unread_msgs_number(self): unread = app.events.get_nb_events() for event in app.events.get_all_events(['printed_gc_msg']): - if not helpers.notify_for_muc(event.jid): + contact = app.contacts.get_groupchat_contact(event.account, + event.jid) + if contact is None or not contact.can_notify(): unread -= 1 + continue + return str(unread) def start_chat(self, jid=''): diff --git a/gajim/roster_window.py b/gajim/roster_window.py index dd6ec3f415..f8bf272223 100644 --- a/gajim/roster_window.py +++ b/gajim/roster_window.py @@ -2368,7 +2368,9 @@ def on_continue(message, pep_dict): unread = app.events.get_nb_events() for event in app.events.get_all_events(['printed_gc_msg']): - if not helpers.notify_for_muc(event.jid): + contact = app.contacts.get_groupchat_contact(event.account, + event.jid) + if contact is None or not contact.can_notify(): unread -= 1 # check if we have recent messages diff --git a/gajim/session.py b/gajim/session.py index f9568ad9ed..01805a5e2b 100644 --- a/gajim/session.py +++ b/gajim/session.py @@ -218,7 +218,9 @@ def roster_message2(self, obj): else: # Everything else obj.show_in_roster = get_show_in_roster(event_type, self) - obj.show_in_systray = get_show_in_systray(event_type, contact.jid) + obj.show_in_systray = get_show_in_systray(event_type, + obj.conn.name, + contact.jid) do_event = True if do_event: kind = obj.properties.type.value @@ -321,7 +323,9 @@ def roster_message(self, jid, msg, tim, msg_type='', event_type = 'message_received' show_in_roster = get_show_in_roster(event_type, self) - show_in_systray = get_show_in_systray(event_type, contact.jid) + show_in_systray = get_show_in_systray(event_type, + self.conn.name, + contact.jid) event = event_t(msg, subject, msg_type, tim, resource, msg_log_id, session=self, -- GitLab