diff --git a/gajim/common/modules/contacts.py b/gajim/common/modules/contacts.py index 9d4e17120f7cef4d5e3f24fc22ae7c8c7e627843..d996e9a05d8011d73fcd8cb89eb85623d0fb6af3 100644 --- a/gajim/common/modules/contacts.py +++ b/gajim/common/modules/contacts.py @@ -254,6 +254,10 @@ def subscription(self): def groups(self): return self._get_roster_attr('groups') + @property + def is_subscribed(self): + return self.subscription in ('from', 'both') + @property def is_blocked(self): return self._module('Blocking').is_blocked(self._jid) diff --git a/gajim/common/modules/entity_time.py b/gajim/common/modules/entity_time.py index 3ccecbf1d4ee548b91f0a665dcee628e6c4f7915..61bcb697ccf7a9fe2368f9a046555d67c09f2de5 100644 --- a/gajim/common/modules/entity_time.py +++ b/gajim/common/modules/entity_time.py @@ -37,8 +37,20 @@ def set_enabled(self, enabled): self._nbxmpp('EntityTime').disable() return - if app.settings.get_account_setting(self._account, 'send_time_info'): - self._nbxmpp('EntityTime').enable() + if not app.settings.get_account_setting(self._account, + 'send_time_info'): + return + + self._nbxmpp('EntityTime').enable() + self._nbxmpp('EntityTime').set_allow_reply_func(self._allow_reply) + + def _allow_reply(self, jid): + item = self._con.get_module('Roster').get_item(jid.bare) + if item is None: + return False + + contact = self._get_contact(jid.bare) + return contact.is_subscribed def get_instance(*args, **kwargs): diff --git a/gajim/common/modules/last_activity.py b/gajim/common/modules/last_activity.py index 66716e5a714e95c60de1799df1756fecb75725d6..7f0a11210a46ecd6932b33b15124f806e0495e6f 100644 --- a/gajim/common/modules/last_activity.py +++ b/gajim/common/modules/last_activity.py @@ -32,15 +32,24 @@ def __init__(self, con): BaseModule.__init__(self, con) def set_enabled(self, enabled): - if enabled and app.is_installed('IDLE'): - if not app.settings.get_account_setting(self._account, - 'send_idle_time'): - return - - self._nbxmpp('LastActivity').set_idle_func( - idle.Monitor.get_idle_sec) - else: + if not enabled or not app.is_installed('IDLE'): self._nbxmpp('LastActivity').disable() + return + + if not app.settings.get_account_setting(self._account, + 'send_idle_time'): + return + + self._nbxmpp('LastActivity').set_idle_func(idle.Monitor.get_idle_sec) + self._nbxmpp('LastActivity').set_allow_reply_func(self._allow_reply) + + def _allow_reply(self, jid): + item = self._con.get_module('Roster').get_item(jid.bare) + if item is None: + return False + + contact = self._get_contact(jid.bare) + return contact.is_subscribed def get_instance(*args, **kwargs): diff --git a/gajim/common/modules/software_version.py b/gajim/common/modules/software_version.py index 031bb4bf6157942b36d8743e85f7c760f9c66084..4f908bf1e8d2a78713c72ee4fb295851e8c7bb02 100644 --- a/gajim/common/modules/software_version.py +++ b/gajim/common/modules/software_version.py @@ -32,14 +32,24 @@ def __init__(self, con): BaseModule.__init__(self, con) def set_enabled(self, enabled): - if enabled: - if not app.settings.get_account_setting(self._account, - 'send_os_info'): - return - self._nbxmpp('SoftwareVersion').set_software_version( - 'Gajim', app.version, get_os_info()) - else: + if not enabled: self._nbxmpp('SoftwareVersion').disable() + return + + if not app.settings.get_account_setting(self._account, 'send_os_info'): + return + + self._nbxmpp('SoftwareVersion').set_software_version( + 'Gajim', app.version, get_os_info()) + self._nbxmpp('SoftwareVersion').set_allow_reply_func(self._allow_reply) + + def _allow_reply(self, jid): + item = self._con.get_module('Roster').get_item(jid.bare) + if item is None: + return False + + contact = self._get_contact(jid.bare) + return contact.is_subscribed def get_instance(*args, **kwargs):