changeset 521:cc8c969ab6e5

"/status" changes - No hardcoded status message - If there is no user-defined status message, the current message is kept - "/status $status -" clears the status message - Auto-away improvement
author Mikael Berthe <mikael@lilotux.net>
date Sat, 19 Nov 2005 16:30:49 +0100
parents c60175268eb5
children fdd1637db7f3
files mcabber/src/jabglue.c mcabber/src/screen.c mcabber/src/settings.c mcabber/src/settings.h
diffstat 4 files changed, 51 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/jabglue.c	Mon Nov 14 22:15:25 2005 +0100
+++ b/mcabber/src/jabglue.c	Sat Nov 19 16:30:49 2005 +0100
@@ -321,16 +321,32 @@
             strprio, (unsigned) -1);
   }
 
-  if (!msg)
-      msg = settings_get_status_msg(st);
+  if (msg) {
+    // The status message has been specified.  We'll use it, unless it is
+    // "-" which is a special case (option meaning "no status message").
+    if (!strcmp(msg, "-"))
+      msg = "";
+  } else {
+    // No status message specified; we'll use:
+    // a) the default status message (if provided by the user);
+    // b) the current status message;
+    // c) no status message (i.e. an empty one).
+    msg = settings_get_status_msg(st);
+    if (!msg) {
+      if (mystatusmsg)
+        msg = mystatusmsg;
+      else
+        msg = "";
+    }
+  }
 
   utf8_msg = to_utf8(msg);
   xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), utf8_msg,
           (unsigned) -1);
 
   jab_send(jc, x);
+  g_free(utf8_msg);
   xmlnode_free(x);
-  g_free(utf8_msg);
 
   // If we didn't change our _global_ status, we are done
   if (recipient) return;
@@ -345,9 +361,14 @@
 
   hk_mystatuschange(0, mystatus, st, msg);
   mystatus = st;
-  if (mystatusmsg) g_free(mystatusmsg);
-  if (msg)  mystatusmsg = g_strdup(msg);
-  else      mystatusmsg = NULL;
+  if (msg != mystatusmsg) {
+    if (mystatusmsg)
+      g_free(mystatusmsg);
+    if (*msg)
+      mystatusmsg = g_strdup(msg);
+    else
+      mystatusmsg = NULL;
+  }
 }
 
 void jb_send_msg(const char *jid, const char *text, int type,
--- a/mcabber/src/screen.c	Mon Nov 14 22:15:25 2005 +0100
+++ b/mcabber/src/screen.c	Sat Nov 19 16:30:49 2005 +0100
@@ -840,17 +840,30 @@
 void inline set_autoaway(bool setaway)
 {
   static enum imstatus oldstatus;
+  static char *oldmsg;
   Autoaway = setaway;
 
   if (setaway) {
-    const char *msg;
+    const char *msg, *prevmsg;
     oldstatus = jb_getstatus();
+    if (oldmsg) {
+      g_free(oldmsg);
+      oldmsg = NULL;
+    }
+    prevmsg = jb_getstatusmsg();
     msg = settings_opt_get("message_autoaway");
-    if (!msg) msg = MSG_AUTOAWAY;
+    if (!msg)
+      msg = prevmsg;
+    if (prevmsg)
+      oldmsg = g_strdup(prevmsg);
     jb_setstatus(away, NULL, msg);
   } else {
     // Back
-    jb_setstatus(oldstatus, NULL, NULL);
+    jb_setstatus(oldstatus, NULL, (oldmsg ? oldmsg : ""));
+    if (oldmsg) {
+      g_free(oldmsg);
+      oldmsg = NULL;
+    }
   }
 }
 
--- a/mcabber/src/settings.c	Mon Nov 14 22:15:25 2005 +0100
+++ b/mcabber/src/settings.c	Sat Nov 19 16:30:49 2005 +0100
@@ -298,8 +298,7 @@
 //   return this message
 // - if there is a user-defined message for the given status (and no
 //   generic user message), it is returned
-// - if no user-defined message is found, return the mcabber default msg
-// - if there is no default (offline, invisible), return an empty string
+// - if no message is found, return NULL
 const gchar *settings_get_status_msg(enum imstatus status)
 {
   const gchar *rstatus = settings_opt_get("message");
@@ -308,32 +307,27 @@
 
   switch(status) {
     case available:
-        if ((rstatus = settings_opt_get("message_avail")) == NULL)
-          rstatus = MSG_AVAIL;
+        rstatus = settings_opt_get("message_avail");
         break;
 
     case freeforchat:
-        if ((rstatus = settings_opt_get("message_free")) == NULL)
-          rstatus = MSG_FREE;
+        rstatus = settings_opt_get("message_free");
         break;
 
     case dontdisturb:
-        if ((rstatus = settings_opt_get("message_dnd")) == NULL)
-          rstatus = MSG_DND;
+        rstatus = settings_opt_get("message_dnd");
         break;
 
     case notavail:
-        if ((rstatus = settings_opt_get("message_notavail")) == NULL)
-          rstatus = MSG_NOTAVAIL;
+        rstatus = settings_opt_get("message_notavail");
         break;
 
     case away:
-        if ((rstatus = settings_opt_get("message_away")) == NULL)
-          rstatus = MSG_AWAY;
+        rstatus = settings_opt_get("message_away");
         break;
 
-    default:
-        rstatus = "";
+    default: // offline, invisible
+        break;
   }
   return rstatus;
 }
--- a/mcabber/src/settings.h	Mon Nov 14 22:15:25 2005 +0100
+++ b/mcabber/src/settings.h	Sat Nov 19 16:30:49 2005 +0100
@@ -11,15 +11,6 @@
 #endif
 
 
-/* Default status messages */
-#define MSG_AVAIL     "I'm here!"
-#define MSG_FREE      "Free for chat"
-#define MSG_DND       "Busy"
-#define MSG_NOTAVAIL  "Not available"
-#define MSG_AWAY      "Away"
-#define MSG_AUTOAWAY  "Auto away status (idle)"
-
-
 #define SETTINGS_TYPE_OPTION    1
 #define SETTINGS_TYPE_ALIAS     2
 #define SETTINGS_TYPE_BINDING   3