diff options
author | Guillaume Desmottes <gdesmott@gnome.org> | 2008-01-24 07:25:23 +0800 |
---|---|---|
committer | Guillaume Desmottes <gdesmott@gnome.org> | 2008-01-24 07:25:23 +0800 |
commit | 7645da39cf40bcd0bf5d15bb20892ce5d22d71f2 (patch) | |
tree | 38d477b03f829578e0821a2abe596af33336f3bd /libempathy | |
parent | dba3cb90b208eeaaea4c9b8e1a21c9f2da9b95de (diff) | |
download | gsoc2013-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.c | 29 | ||||
-rw-r--r-- | libempathy/empathy-irc-network.h | 2 |
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 |