diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py index 25ce7ba4a6a75f7af68a85eddd65b0d4cb66b54a..bb4bd4a59d0ae97a6526be96bc62e90ca556801e 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 1619b950263d68db09c9965fbc5da1e6d62389f7..b495ceea7f117233ae9067ff2ce6369eb8598636 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 edcb10b159718b881f8da3c79f04060e78aee6a1..5b69917235da0c809822f3d5b5e05dd85be030dd 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 c2aa9fba5bc90bfdd98241b95d038240d5585432..631c79c20fbd0a09e3f682ca188e4e8e1616a4cb 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 6f7294f70a38819d8516daf22086aa1e6260ec4d..aba80c19595b1e79ebfa2619cbc29ce95bb2c4dc 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 e598442c5210b7c1bd2f4154d651a0ab7f732961..de48a39dc7797a989b6a95bb2064ac6e32dcf6af 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 4b84e1dadecedb6bc6e43061a6930941bad97952..54b707e8f0be216035da8a35b0f3f1269f64e79a 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 e3d2413c3a676bd27ead6f02868fd7a37ae5acd5..026f57c95c45ebdb81f0eb83a9dc316370aa4c9d 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 e9345c1f34524f3e2cb50bb24e631aab1d6b6259..f8204e22b48bdaf4db1729e61110d174d6d7d6c6 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 dd6ec3f415361077b960130bd4c5144a6ce6b220..f8bf272223cd5968d8fc54a3e111c139eb12c45e 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 f9568ad9ed5f590182913addd84c601764cb426e..01805a5e2b479afcd5e2ccabe2d23089fbb4164e 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,