changeset 294:871e53769084

Allow one status message per Jabber status Messages can be defined with the following options: message (overrides any of the others), message_avail, message_free, message_dnd, message_notavail, message_away
author Mikael Berthe <mikael@lilotux.net>
date Sat, 09 Jul 2005 12:44:57 +0100
parents d0295e735768
children bc19dbd78551 d31a31bd267d
files mcabber/mcabberrc.example mcabber/src/jabglue.c mcabber/src/jabglue.h mcabber/src/settings.c mcabber/src/settings.h
diffstat 5 files changed, 74 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabberrc.example	Sat Jul 09 09:50:01 2005 +0100
+++ b/mcabber/mcabberrc.example	Sat Jul 09 12:44:57 2005 +0100
@@ -44,6 +44,16 @@
 # You can enable debug in main.c before compiling mcabber, too.
 #debug = /home/mikael/mcabber.log
 
+#  Status messages
+# The "message" value will override all others, take care!
+#message = Unique message status
+#message_avail     = I'm available
+#message_free      = I'm free for chat
+#message_dnd       = Please do not disturb
+#message_notavail  = I'm not available
+#message_away      = I'm away
+#message_autoaway  = Auto-away (Not yet implemented)
+
 #  The colors
 # Colors are: black, red, green, yellow, blue, magenta, cyan, white
 #color_background   = blue
--- a/mcabber/src/jabglue.c	Sat Jul 09 09:50:01 2005 +0100
+++ b/mcabber/src/jabglue.c	Sat Jul 09 12:44:57 2005 +0100
@@ -29,6 +29,7 @@
 #include "hooks.h"
 #include "utf8.h"
 #include "utils.h"
+#include "settings.h"
 
 #define JABBERPORT      5222
 #define JABBERSSLPORT   5223
@@ -226,7 +227,7 @@
   return mystatus;
 }
 
-void jb_setstatus(enum imstatus st, char *msg)
+void jb_setstatus(enum imstatus st, const char *msg)
 {
   xmlnode x;
 
@@ -274,10 +275,8 @@
             strprio, (unsigned) -1);
   }
 
-  if (!msg) {
-    msg  = ""; // FIXME
-    //msg = imstatus2str(st);
-  }
+  if (!msg)
+      msg = settings_get_status_msg(st);
 
   xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), msg,
           (unsigned) -1);
@@ -434,7 +433,7 @@
 
   //setautostatus(jhook.manualstatus);
 
-  jb_setstatus(available, "I'm here!"); // XXX not always "available"...
+  jb_setstatus(available, NULL);
   buddylist_build();
   /*
   for (i = 0; i < clist.count; i++) {
--- a/mcabber/src/jabglue.h	Sat Jul 09 09:50:01 2005 +0100
+++ b/mcabber/src/jabglue.h	Sat Jul 09 12:44:57 2005 +0100
@@ -43,7 +43,7 @@
 void jb_delbuddy(const char *jid);
 void jb_updatebuddy(const char *jid, const char *name, const char *group);
 inline enum imstatus jb_getstatus();
-void jb_setstatus(enum imstatus st, char *msg);
+void jb_setstatus(enum imstatus st, const char *msg);
 void jb_send_msg(const char *, const char *);
 void jb_keepalive();
 inline void jb_reset_keepalive();
--- a/mcabber/src/settings.c	Sat Jul 09 09:50:01 2005 +0100
+++ b/mcabber/src/settings.c	Sat Jul 09 12:44:57 2005 +0100
@@ -189,3 +189,48 @@
   return settings_get(SETTINGS_TYPE_BINDING, asciikey);
 }
 
+//  settings_get_status_msg(status)
+// Return a string with the current status message:
+// - if there is a user-defined message ("message" option),
+//   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
+const gchar *settings_get_status_msg(enum imstatus status)
+{
+  const gchar *rstatus = settings_opt_get("message");
+
+  if (rstatus) return rstatus;
+
+  switch(status) {
+    case available:
+        if ((rstatus = settings_opt_get("message_avail")) == NULL)
+          rstatus = MSG_AVAIL;
+        break;
+
+    case freeforchat:
+        if ((rstatus = settings_opt_get("message_free")) == NULL)
+          rstatus = MSG_FREE;
+        break;
+
+    case dontdisturb:
+        if ((rstatus = settings_opt_get("message_dnd")) == NULL)
+          rstatus = MSG_DND;
+        break;
+
+    case notavail:
+        if ((rstatus = settings_opt_get("message_notavail")) == NULL)
+          rstatus = MSG_NOTAVAIL;
+        break;
+
+    case away:
+        if ((rstatus = settings_opt_get("message_away")) == NULL)
+          rstatus = MSG_AWAY;
+        break;
+
+    default:
+        rstatus = "";
+  }
+  return rstatus;
+}
--- a/mcabber/src/settings.h	Sat Jul 09 09:50:01 2005 +0100
+++ b/mcabber/src/settings.h	Sat Jul 09 12:44:57 2005 +0100
@@ -3,10 +3,22 @@
 
 #include <glib.h>
 
+#include "jabglue.h"
+
 #ifndef	__USE_ISOC99
 # define isblank(c)  ((c) == 0x20 || (c) == 0x09)
 #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"
+
+
 #define SETTINGS_TYPE_OPTION    1
 #define SETTINGS_TYPE_ALIAS     2
 #define SETTINGS_TYPE_BINDING   3
@@ -20,6 +32,7 @@
 void    settings_del(guint type, const gchar *key);
 const gchar *settings_get(guint type, const gchar *key);
 int     settings_get_int(guint type, const gchar *key);
+const gchar *settings_get_status_msg(enum imstatus status);
 
 const gchar *isbound(int key);