Philipp Hörist pushed to branch master at gajim / gajim


Commits:
d572b3c5 by lovetox at 2020-06-02T08:16:52+02:00
Client: Update status while disconnected

Idle status changes while disconnected were lost leading to reconnecting
or resuming with the idle status we had before disconnect

- - - - -


1 changed file:

- gajim/common/client.py


Changes:

=====================================
gajim/common/client.py
=====================================
@@ -69,6 +69,7 @@ class Client(ConnectionHandlers):
         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 @@ class Client(ConnectionHandlers):
         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 @@ class Client(ConnectionHandlers):
             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 @@ class Client(ConnectionHandlers):
         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 @@ class Client(ConnectionHandlers):
             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():



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/d572b3c529761794b6b01c50debdb02c675d58ad

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/d572b3c529761794b6b01c50debdb02c675d58ad
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to