*
* 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 "config.h"
+#include "empathy-status-presets.h"
-#include <sys/types.h>
#include <sys/stat.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include <telepathy-glib/util.h>
+#include <tp-account-widgets/tpaw-utils.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"
+#define STATUS_PRESETS_DTD_RESOURCENAME "/org/gnome/Empathy/empathy-status-presets.dtd"
#define STATUS_PRESETS_MAX_EACH 15
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;
xmlNodePtr presets_node;
xmlNodePtr node;
- empathy_debug (DEBUG_DOMAIN, "Attempting to parse file:'%s'...", filename);
+ DEBUG ("Attempting to parse file:'%s'...", filename);
ctxt = xmlNewParserCtxt ();
return;
}
- if (!empathy_xml_validate (doc, STATUS_PRESETS_DTD_FILENAME)) {
+ if (!tpaw_xml_validate_from_resource (doc, STATUS_PRESETS_DTD_RESOURCENAME)) {
g_warning ("Failed to validate file:'%s'", filename);
- xmlFreeDoc(doc);
+ xmlFreeDoc (doc);
xmlFreeParserCtxt (ctxt);
return;
}
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;
}
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);
+ }
}
}
/* 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);
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);
GList *l;
gchar *dir;
gchar *file;
- gint count[LAST_MC_PRESENCE];
+ gint count[TP_NUM_CONNECTION_PRESENCE_TYPES];
gint i;
- for (i = 0; i < LAST_MC_PRESENCE; i++) {
+ for (i = 0; i < TP_NUM_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) {
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) {
}
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);
}
GList *
-empathy_status_presets_get (McPresence state,
+empathy_status_presets_get (TpConnectionPresenceType state,
gint max_number)
{
GList *list = NULL;
}
void
-empathy_status_presets_set_last (McPresence state,
+empathy_status_presets_set_last (TpConnectionPresenceType state,
const gchar *status)
{
GList *l;
}
void
-empathy_status_presets_remove (McPresence state,
+empathy_status_presets_remove (TpConnectionPresenceType state,
const gchar *status)
{
StatusPreset *preset;
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;
}
static void
-status_presets_set_default (McPresence state,
+status_presets_set_default (TpConnectionPresenceType state,
const gchar *status)
{
if (default_preset) {
}
void
-empathy_status_presets_set_default (McPresence state,
+empathy_status_presets_set_default (TpConnectionPresenceType state,
const gchar *status)
{
status_presets_set_default (state, status);
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;
+ }
+}