]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-status-presets.c
Merge branch 'sasl'
[empathy.git] / libempathy / empathy-status-presets.c
index 315794070c2e894565d9fcf8eb5083585ea12f8f..319ca53d9073770af24834f231b7f4f4b79e9f67 100644 (file)
 
 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;
@@ -116,7 +116,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 +127,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_from_str (state_str);
-
-                               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);
+                               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,7 +154,7 @@ 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);
        }
 
        DEBUG ("Parsed %d status presets", g_list_length (presets));
@@ -175,7 +176,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 +196,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_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 +229,7 @@ status_presets_file_save (void)
                xmlChar      *state;
 
                sp = l->data;
-               state = (gchar *) empathy_presence_to_str (sp->state);
+               state = (xmlChar *) empathy_presence_to_str (sp->state);
 
                count[sp->state]++;
                if (count[sp->state] > STATUS_PRESETS_MAX_EACH) {
@@ -236,8 +237,8 @@ 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 */
@@ -253,7 +254,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 +283,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 +324,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 +351,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 +378,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 +389,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 +406,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;
+       }
+}