aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy
diff options
context:
space:
mode:
authorGuillaume Desmottes <gdesmott@gnome.org>2008-01-24 07:25:23 +0800
committerGuillaume Desmottes <gdesmott@gnome.org>2008-01-24 07:25:23 +0800
commit7645da39cf40bcd0bf5d15bb20892ce5d22d71f2 (patch)
tree38d477b03f829578e0821a2abe596af33336f3bd /libempathy
parentdba3cb90b208eeaaea4c9b8e1a21c9f2da9b95de (diff)
downloadgsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.tar
gsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.tar.gz
gsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.tar.bz2
gsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.tar.lz
gsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.tar.xz
gsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.tar.zst
gsoc2013-empathy-7645da39cf40bcd0bf5d15bb20892ce5d22d71f2.zip
only write to XML network loaded from the user file or which was modified
Diffstat (limited to 'libempathy')
-rw-r--r--libempathy/empathy-irc-network-manager.c29
-rw-r--r--libempathy/empathy-irc-network.h2
2 files changed, 25 insertions, 6 deletions
diff --git a/libempathy/empathy-irc-network-manager.c b/libempathy/empathy-irc-network-manager.c
index 1722bcc5d..c1b12d493 100644
--- a/libempathy/empathy-irc-network-manager.c
+++ b/libempathy/empathy-irc-network-manager.c
@@ -59,7 +59,7 @@ static void
irc_network_manager_load_servers (EmpathyIrcNetworkManager *manager);
static gboolean
irc_network_manager_file_parse (EmpathyIrcNetworkManager *manager,
- const gchar *filename);
+ const gchar *filename, gboolean user_defined);
static gboolean
irc_network_manager_file_save (EmpathyIrcNetworkManager *manager);
@@ -215,6 +215,13 @@ empathy_irc_network_manager_new (const gchar *global_file,
}
static void
+network_modified (EmpathyIrcNetwork *network,
+ EmpathyIrcNetworkManager *self)
+{
+ network->user_defined = TRUE;
+}
+
+static void
add_network (EmpathyIrcNetworkManager *self,
EmpathyIrcNetwork *network,
const gchar *id)
@@ -223,6 +230,8 @@ add_network (EmpathyIrcNetworkManager *self,
EMPATHY_IRC_NETWORK_MANAGER_GET_PRIVATE (self);
g_hash_table_insert (priv->networks, g_strdup (id), g_object_ref (network));
+
+ g_signal_connect (network, "modified", G_CALLBACK (network_modified), self);
}
void
@@ -258,6 +267,7 @@ empathy_irc_network_manager_add (EmpathyIrcNetworkManager *self,
empathy_debug (DEBUG_DOMAIN, "add server with \"%s\" as ID", id);
+ network->user_defined = TRUE;
add_network (self, network, id);
g_free (bare_id);
@@ -341,7 +351,7 @@ load_global_file (EmpathyIrcNetworkManager *self)
return;
}
- irc_network_manager_file_parse (self, priv->global_file);
+ irc_network_manager_file_parse (self, priv->global_file, FALSE);
}
static void
@@ -360,7 +370,7 @@ load_user_file (EmpathyIrcNetworkManager *self)
return;
}
- irc_network_manager_file_parse (self, priv->user_file);
+ irc_network_manager_file_parse (self, priv->user_file, TRUE);
}
static void
@@ -426,7 +436,8 @@ irc_network_manager_parse_irc_server (EmpathyIrcNetwork *network,
static void
irc_network_manager_parse_irc_network (EmpathyIrcNetworkManager *self,
- xmlNodePtr node)
+ xmlNodePtr node,
+ gboolean user_defined)
{
EmpathyIrcNetworkManagerPrivate *priv =
EMPATHY_IRC_NETWORK_MANAGER_GET_PRIVATE (self);
@@ -452,6 +463,7 @@ irc_network_manager_parse_irc_network (EmpathyIrcNetworkManager *self,
name = xmlGetProp (node, "name");
network = empathy_irc_network_new (name);
+ network->user_defined = user_defined;
add_network (self, network, id);
empathy_debug (DEBUG_DOMAIN, "add network %s (id %s)", name, id);
@@ -480,7 +492,8 @@ irc_network_manager_parse_irc_network (EmpathyIrcNetworkManager *self,
static gboolean
irc_network_manager_file_parse (EmpathyIrcNetworkManager *self,
- const gchar *filename)
+ const gchar *filename,
+ gboolean user_defined)
{
EmpathyIrcNetworkManagerPrivate *priv;
xmlParserCtxtPtr ctxt;
@@ -517,7 +530,7 @@ irc_network_manager_file_parse (EmpathyIrcNetworkManager *self,
for (node = networks->children; node; node = node->next)
{
- irc_network_manager_parse_irc_network (self, node);
+ irc_network_manager_parse_irc_network (self, node, user_defined);
}
/*
@@ -542,6 +555,10 @@ write_network_to_xml (const gchar *id,
GSList *servers, *l;
gchar *name;
+ if (!network->user_defined)
+ /* no need to write this network to the XML */
+ return;
+
network_node = xmlNewChild (root, NULL, "network", NULL);
xmlNewProp (network_node, "id", id);
diff --git a/libempathy/empathy-irc-network.h b/libempathy/empathy-irc-network.h
index 8e5279dcf..06823cbb2 100644
--- a/libempathy/empathy-irc-network.h
+++ b/libempathy/empathy-irc-network.h
@@ -36,6 +36,8 @@ struct _EmpathyIrcNetwork
GObject parent;
gpointer priv;
+
+ gboolean user_defined;
};
struct _EmpathyIrcNetworkClass