2005-02-21  Not Zed  <NotZed@Ximian.com>

        ** See bug #71528.

        * em-migrate.c (remove_system_searches, em_migrate_1_4): remove
        all 'system' searches when upgrading from pre 2.0.

svn path=/trunk/; revision=28876
This commit is contained in:
Not Zed
2005-02-24 02:20:32 +00:00
committed by Michael Zucci
parent fa3b141d12
commit 516aee1304
2 changed files with 85 additions and 42 deletions

View File

@ -1,3 +1,10 @@
2005-02-21 Not Zed <NotZed@Ximian.com>
** See bug #71528.
* em-migrate.c (remove_system_searches, em_migrate_1_4): remove
all 'system' searches when upgrading from pre 2.0.
2005-02-21 Not Zed <NotZed@Ximian.com>
** See bug #71967

View File

@ -69,6 +69,36 @@
#define d(x) x
/* upgrade helper functions */
static xmlDocPtr
emm_load_xml (const char *dirname, const char *filename)
{
xmlDocPtr doc;
struct stat st;
char *path;
path = g_strdup_printf ("%s/%s", dirname, filename);
if (stat (path, &st) == -1 || !(doc = xmlParseFile (path))) {
g_free (path);
return NULL;
}
g_free (path);
return doc;
}
static int
emm_save_xml (xmlDocPtr doc, const char *dirname, const char *filename)
{
char *path;
int retval;
path = g_strdup_printf ("%s/%s", dirname, filename);
retval = e_xml_save_file (path, doc);
g_free (path);
return retval;
}
static xmlNodePtr
xml_find_node (xmlNodePtr parent, const char *name)
@ -2470,6 +2500,42 @@ em_migrate_imap_cmeta_1_4(const char *evolution_dir, CamelException *ex)
return 0;
}
static void
remove_system_searches(xmlDocPtr searches)
{
xmlNodePtr node;
/* in pre 2.0, system searches were stored in the user
* searches.xml file with the source set to 'demand'. In 2.0+
* the system searches are stored in the system
* searchtypes.xml file instead */
node = xmlDocGetRootElement(searches);
if (!node->name || strcmp(node->name, "filteroptions"))
return;
if (!(node = xml_find_node(node, "ruleset")))
return;
node = node->children;
while (node != NULL) {
xmlNodePtr nnode = node->next;
if (node->name && !strcmp (node->name, "rule")) {
char *src;
src = xmlGetProp(node, "source");
if (src && !strcmp(src, "demand")) {
xmlUnlinkNode(node);
xmlFreeNodeList(node);
}
xmlFree (src);
}
node = nnode;
}
}
static int
em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders, CamelException *ex)
{
@ -2477,7 +2543,8 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
CamelException lex;
struct stat st;
char *path;
xmlDocPtr searches;
path = g_build_filename (evolution_dir, "mail", NULL);
camel_init (path, TRUE);
@ -2526,16 +2593,17 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
upgrade_xml_uris(filters, upgrade_xml_uris_1_4);
upgrade_vfolder_sources_1_4(vfolders);
upgrade_xml_uris(vfolders, upgrade_xml_uris_1_4);
path = g_build_filename (g_get_home_dir (), "evolution", "searches.xml", NULL);
if (stat (path, &st) == 0 && S_ISREG (st.st_mode)) {
char *dest;
dest = g_build_filename (evolution_dir, "mail", "searches.xml", NULL);
cp (path, dest, FALSE, CP_UNIQUE);
g_free (dest);
path = g_build_filename(g_get_home_dir(), "evolution", NULL);
searches = emm_load_xml(path, "searches.xml");
g_free(path);
if (searches) {
remove_system_searches(searches);
path = g_build_filename(evolution_dir, "mail", NULL);
emm_save_xml(searches, path, "searches.xml");
g_free(path);
xmlFreeDoc(searches);
}
g_free (path);
if (em_migrate_pop_uid_caches_1_4 (evolution_dir, ex) == -1)
return -1;
@ -2553,38 +2621,6 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
return 0;
}
static xmlDocPtr
emm_load_xml (const char *dirname, const char *filename)
{
xmlDocPtr doc;
struct stat st;
char *path;
path = g_strdup_printf ("%s/%s", dirname, filename);
if (stat (path, &st) == -1 || !(doc = xmlParseFile (path))) {
g_free (path);
return NULL;
}
g_free (path);
return doc;
}
static int
emm_save_xml (xmlDocPtr doc, const char *dirname, const char *filename)
{
char *path;
int retval;
path = g_strdup_printf ("%s/%s", dirname, filename);
retval = e_xml_save_file (path, doc);
g_free (path);
return retval;
}
static int
emm_setup_initial(const char *evolution_dir)
{