changeset 1693:32c6d81bd1ef

Update status when unexpectedly disconnected from server
author Mikael Berthe <mikael@lilotux.net>
date Sat, 06 Feb 2010 19:01:06 +0100
parents 434b2a32d2a0
children bd60a275dbc2
files mcabber/mcabber/xmpp.c
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/xmpp.c	Sat Feb 06 18:20:09 2010 +0100
+++ b/mcabber/mcabber/xmpp.c	Sat Feb 06 19:01:06 2010 +0100
@@ -936,6 +936,7 @@
   scr_UpdateBuddyWindow();
 
   scr_LogPrint(LPRINT_NORMAL, "Disconnected, reason:%d->'%s'\n", reason, str);
+  xmpp_setstatus(offline, NULL, mystatusmsg, TRUE);
 }
 
 static void handle_state_events(const char *from, LmMessageNode *node)
@@ -1809,6 +1810,7 @@
                   int do_not_sign)
 {
   LmMessage *m;
+  gboolean isonline;
 
   if (msg) {
     // The status message has been specified.  We'll use it, unless it is
@@ -1829,10 +1831,12 @@
     }
   }
 
+  isonline = xmpp_is_online();
+
   // Only send the packet if we're online.
   // (But we want to update internal status even when disconnected,
   // in order to avoid some problems during network failures)
-  if (xmpp_is_online()) {
+  if (isonline) {
     const char *s_msg = (st != invisible ? msg : NULL);
     m = lm_message_new_presence(st, recipient, s_msg);
     insert_entity_capabilities(m->node, st); // Entity Capabilities (XEP-0115)
@@ -1855,7 +1859,7 @@
   // If we didn't change our _global_ status, we are done
   if (recipient) return;
 
-  if (xmpp_is_online()) {
+  if (isonline) {
     // Send presence to chatrooms
     if (st != invisible) {
       struct T_presence room_presence;
@@ -1863,7 +1867,9 @@
       room_presence.msg = msg;
       foreach_buddy(ROSTER_TYPE_ROOM, &roompresence, &room_presence);
     }
+  }
 
+  if (isonline || !st) {
     // We'll have to update the roster if we switch to/from offline because
     // we don't know the presences of buddies when offline...
     if (mystatus == offline || st == offline)