]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-status-presets.c
include telepathy-glib.h
[empathy.git] / libempathy / empathy-status-presets.c
index 54f7b629c82429b38a08ace64d853967b463c6e3..940253343c51dde5af430738c329bead1c1cb055 100644 (file)
@@ -14,8 +14,8 @@
  *
  * You should have received a copy of the GNU General Public
  * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA  02110-1301  USA
  *
  * Author: Martyn Russell <martyn@imendio.com>
  */
 #include <string.h>
 
 #include <glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
-#include <telepathy-glib/util.h>
-
-#include "empathy-debug.h"
 #include "empathy-utils.h"
 #include "empathy-status-presets.h"
 
-#define DEBUG_DOMAIN "StatusPresets"
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
 
 #define STATUS_PRESETS_XML_FILENAME "status-presets.xml"
 #define STATUS_PRESETS_DTD_FILENAME "empathy-status-presets.dtd"
 
 typedef struct {
        gchar      *status;
-       McPresence  state;
+       TpConnectionPresenceType  state;
 } StatusPreset;
 
-static StatusPreset *status_preset_new          (McPresence    state,
+static StatusPreset *status_preset_new          (TpConnectionPresenceType    state,
                                                 const gchar  *status);
 static void     status_preset_free              (StatusPreset *status);
 static void     status_presets_file_parse       (const gchar  *filename);
-const gchar *   status_presets_get_state_as_str (McPresence    state);
+const gchar *   status_presets_get_state_as_str (TpConnectionPresenceType    state);
 static gboolean status_presets_file_save        (void);
-static void     status_presets_set_default      (McPresence    state,
+static void     status_presets_set_default      (TpConnectionPresenceType    state,
                                                 const gchar  *status);
 
 static GList        *presets = NULL;
 static StatusPreset *default_preset = NULL;
 
 static StatusPreset *
-status_preset_new (McPresence   state,
+status_preset_new (TpConnectionPresenceType   state,
                   const gchar *status)
 {
        StatusPreset *preset;
@@ -90,7 +88,7 @@ status_presets_file_parse (const gchar *filename)
        xmlNodePtr       presets_node;
        xmlNodePtr       node;
 
-       empathy_debug (DEBUG_DOMAIN, "Attempting to parse file:'%s'...", filename);
+       DEBUG ("Attempting to parse file:'%s'...", filename);
 
        ctxt = xmlNewParserCtxt ();
 
@@ -104,7 +102,7 @@ status_presets_file_parse (const gchar *filename)
 
        if (!empathy_xml_validate (doc, STATUS_PRESETS_DTD_FILENAME)) {
                g_warning ("Failed to validate file:'%s'", filename);
-               xmlFreeDoc(doc);
+               xmlFreeDoc (doc);
                xmlFreeParserCtxt (ctxt);
                return;
        }
@@ -116,7 +114,7 @@ status_presets_file_parse (const gchar *filename)
        while (node) {
                if (strcmp ((gchar *) node->name, "status") == 0 ||
                    strcmp ((gchar *) node->name, "default") == 0) {
-                       McPresence    state;
+                       TpConnectionPresenceType    state;
                        gchar        *status;
                        gchar        *state_str;
                        StatusPreset *preset;
@@ -127,20 +125,21 @@ status_presets_file_parse (const gchar *filename)
                        }
 
                        status = (gchar *) xmlNodeGetContent (node);
-                       state_str = (gchar *) xmlGetProp (node, "presence");
+                       state_str = (gchar *) xmlGetProp (node, (const xmlChar *) "presence");
 
                        if (state_str) {
-                               state = empathy_presence_state_from_str (state_str);
-
-                               if (is_default) {
-                                       empathy_debug (DEBUG_DOMAIN,
-                                                     "Default status preset state is:'%s', status:'%s'",
-                                                     state_str, status);
-
-                                       status_presets_set_default (state, status);
-                               } else {
-                                       preset = status_preset_new (state, status);
-                                       presets = g_list_append (presets, preset);
+                               state = empathy_presence_from_str (state_str);
+                               if (empathy_status_presets_is_valid (state)) {
+                                       if (is_default) {
+                                               DEBUG ("Default status preset state is:"
+                                                       " '%s', status:'%s'", state_str,
+                                                       status);
+
+                                               status_presets_set_default (state, status);
+                                       } else {
+                                               preset = status_preset_new (state, status);
+                                               presets = g_list_append (presets, preset);
+                                       }
                                }
                        }
 
@@ -153,10 +152,10 @@ status_presets_file_parse (const gchar *filename)
 
        /* Use the default if not set */
        if (!default_preset) {
-               status_presets_set_default (MC_PRESENCE_OFFLINE, NULL);
+               status_presets_set_default (TP_CONNECTION_PRESENCE_TYPE_OFFLINE, NULL);
        }
 
-       empathy_debug (DEBUG_DOMAIN, "Parsed %d status presets", g_list_length (presets));
+       DEBUG ("Parsed %d status presets", g_list_length (presets));
 
        xmlFreeDoc (doc);
        xmlFreeParserCtxt (ctxt);
@@ -175,7 +174,7 @@ empathy_status_presets_get_all (void)
                presets = NULL;
        }
 
-       dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+       dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL);
        g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
        file_with_path = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL);
        g_free (dir);
@@ -195,31 +194,31 @@ status_presets_file_save (void)
        GList      *l;
        gchar      *dir;
        gchar      *file;
-       gint        count[LAST_MC_PRESENCE];
+       gint        count[NUM_TP_CONNECTION_PRESENCE_TYPES];
        gint        i;
 
-       for (i = 0; i < LAST_MC_PRESENCE; i++) {
+       for (i = 0; i < NUM_TP_CONNECTION_PRESENCE_TYPES; i++) {
                count[i] = 0;
        }
 
-       dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+       dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL);
        g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
        file = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL);
        g_free (dir);
 
-       doc = xmlNewDoc ("1.0");
-       root = xmlNewNode (NULL, "presets");
+       doc = xmlNewDoc ((const xmlChar *) "1.0");
+       root = xmlNewNode (NULL, (const xmlChar *) "presets");
        xmlDocSetRootElement (doc, root);
 
        if (default_preset) {
                xmlNodePtr  subnode;
                xmlChar    *state;
 
-               state = (gchar*) empathy_presence_state_to_str (default_preset->state);
+               state = (xmlChar *) empathy_presence_to_str (default_preset->state);
 
-               subnode = xmlNewTextChild (root, NULL, "default",
-                                          default_preset->status);
-               xmlNewProp (subnode, "presence", state);
+               subnode = xmlNewTextChild (root, NULL, (const xmlChar *) "default",
+                                         (const xmlChar *) default_preset->status);
+               xmlNewProp (subnode, (const xmlChar *) "presence", state);
        }
 
        for (l = presets; l; l = l->next) {
@@ -228,7 +227,7 @@ status_presets_file_save (void)
                xmlChar      *state;
 
                sp = l->data;
-               state = (gchar*) empathy_presence_state_to_str (sp->state);
+               state = (xmlChar *) empathy_presence_to_str (sp->state);
 
                count[sp->state]++;
                if (count[sp->state] > STATUS_PRESETS_MAX_EACH) {
@@ -236,14 +235,14 @@ status_presets_file_save (void)
                }
 
                subnode = xmlNewTextChild (root, NULL,
-                                          "status", sp->status);
-               xmlNewProp (subnode, "presence", state);
+                                          (const xmlChar *) "status", (const xmlChar *) sp->status);
+               xmlNewProp (subnode, (const xmlChar *) "presence", state);
        }
 
        /* Make sure the XML is indented properly */
        xmlIndentTreeOutput = 1;
 
-       empathy_debug (DEBUG_DOMAIN, "Saving file:'%s'", file);
+       DEBUG ("Saving file:'%s'", file);
        xmlSaveFormatFileEnc (file, doc, "utf-8", 1);
        xmlFreeDoc (doc);
 
@@ -253,7 +252,7 @@ status_presets_file_save (void)
 }
 
 GList *
-empathy_status_presets_get (McPresence state,
+empathy_status_presets_get (TpConnectionPresenceType state,
                           gint       max_number)
 {
        GList *list = NULL;
@@ -282,7 +281,7 @@ empathy_status_presets_get (McPresence state,
 }
 
 void
-empathy_status_presets_set_last (McPresence   state,
+empathy_status_presets_set_last (TpConnectionPresenceType   state,
                                const gchar *status)
 {
        GList        *l;
@@ -323,7 +322,7 @@ empathy_status_presets_set_last (McPresence   state,
 }
 
 void
-empathy_status_presets_remove (McPresence   state,
+empathy_status_presets_remove (TpConnectionPresenceType   state,
                               const gchar *status)
 {
        StatusPreset *preset;
@@ -350,16 +349,16 @@ empathy_status_presets_reset (void)
 
        presets = NULL;
 
-       status_presets_set_default (MC_PRESENCE_AVAILABLE, NULL);
+       status_presets_set_default (TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, NULL);
 
        status_presets_file_save ();
 }
 
-McPresence
+TpConnectionPresenceType
 empathy_status_presets_get_default_state (void)
 {
        if (!default_preset) {
-               return MC_PRESENCE_OFFLINE;
+               return TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
        }
 
        return default_preset->state;
@@ -377,7 +376,7 @@ empathy_status_presets_get_default_status (void)
 }
 
 static void
-status_presets_set_default (McPresence   state,
+status_presets_set_default (TpConnectionPresenceType   state,
                            const gchar *status)
 {
        if (default_preset) {
@@ -388,7 +387,7 @@ status_presets_set_default (McPresence   state,
 }
 
 void
-empathy_status_presets_set_default (McPresence   state,
+empathy_status_presets_set_default (TpConnectionPresenceType   state,
                                   const gchar *status)
 {
        status_presets_set_default (state, status);
@@ -405,3 +404,33 @@ empathy_status_presets_clear_default (void)
 
        status_presets_file_save ();
 }
+
+/**
+ * empathy_status_presets_is_valid:
+ * @state: a #TpConnectionPresenceType
+ *
+ * Check if a presence type can be used as a preset.
+ *
+ * Returns: %TRUE if the presence type can be used as a preset.
+ */
+gboolean
+empathy_status_presets_is_valid (TpConnectionPresenceType state)
+{
+       switch (state) {
+               case TP_CONNECTION_PRESENCE_TYPE_UNSET:
+               case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
+               case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
+               case TP_CONNECTION_PRESENCE_TYPE_ERROR:
+                       return FALSE;
+
+               case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
+               case TP_CONNECTION_PRESENCE_TYPE_AWAY:
+               case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
+               case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
+               case TP_CONNECTION_PRESENCE_TYPE_BUSY:
+                       return TRUE;
+
+               default:
+                       return FALSE;
+       }
+}