diff --git a/gajim/common/client.py b/gajim/common/client.py index 8def2001a68f1873628abcd5c28c439c9733f81d..8d3a3986fa159c836d4f2520cfda871bd3b8500b 100644 --- a/gajim/common/client.py +++ b/gajim/common/client.py @@ -69,6 +69,7 @@ def __init__(self, account): self.roster_supported = True self._state = ClientState.DISCONNECTED + self._status_sync_on_resume = False self._status = 'online' self._status_message = '' self._idle_status = 'online' @@ -223,14 +224,18 @@ def _on_resume_successful(self, _client, _signal_name): self._set_state(ClientState.CONNECTED) self._set_client_available() + if self._status_sync_on_resume: + self._status_sync_on_resume = False + self.update_presence() + else: + app.nec.push_incoming_event( + OurShowEvent(None, conn=self, show=self._status)) + def _set_client_available(self): self._set_state(ClientState.AVAILABLE) app.nec.push_incoming_event(NetworkEvent('account-connected', account=self._account)) - app.nec.push_incoming_event( - OurShowEvent(None, conn=self, show=self._status)) - def disconnect(self, gracefully, reconnect, destroy_client=False): if self._state.is_disconnecting: log.warning('Disconnect already in progress') @@ -432,17 +437,9 @@ def connect_machine(self): self._send_first_presence() def _send_first_presence(self): - self._priority = app.get_priority(self._account, self._status) - - self._status, message, idle = self.get_presence_state() - - self.get_module('Presence').send_presence( - priority=self._priority, - show=self._status, - status=message, - idle_time=idle) - + self._status_sync_on_resume = False self._set_client_available() + self.update_presence() if not self.avatar_conversion: # ask our VCard @@ -564,9 +561,7 @@ def _idle_state_changed(self, monitor): if monitor.is_awake(): self._idle_status = state self._idle_status_message = '' - if self._state.is_available and self._idle_status_enabled: - self._status = state - self.update_presence() + self._update_status() return if not app.config.get(f'auto{state}'): @@ -578,9 +573,17 @@ def _idle_state_changed(self, monitor): self._idle_status = state self._idle_status_message = get_idle_status_message( state, self._status_message) - if self._state.is_available and self._idle_status_enabled: - self._status = state - self.update_presence() + self._update_status() + + def _update_status(self): + if not self._idle_status_enabled: + return + + self._status = self._idle_status + if self._state.is_available: + self.update_presence() + else: + self._status_sync_on_resume = True def _idle_status_active(self): if not Monitor.is_available():