aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--src/bookmarks/ephy-bookmarks-import.c40
2 files changed, 43 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index cb52f944b..1c89310d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2003-12-13 Christian Persch <chpe@cvs.gnome.org>
+ * src/bookmarks/ephy-bookmarks-import.c:
+ (ephy_bookmarks_import_mozilla):
+
+ Better way of mapping hierarchy to topics when importing
+ bookmarks from mozilla. Fixes bug #124145.
+
+2003-12-13 Christian Persch <chpe@cvs.gnome.org>
+
* lib/ephy-string.c: (ephy_string_shorten), (ephy_string_to_int),
(ephy_string_blank_chr), (ephy_string_elide_underscores),
(ephy_string_double_underscores):
diff --git a/src/bookmarks/ephy-bookmarks-import.c b/src/bookmarks/ephy-bookmarks-import.c
index c58479922..53849cc1c 100644
--- a/src/bookmarks/ephy-bookmarks-import.c
+++ b/src/bookmarks/ephy-bookmarks-import.c
@@ -568,7 +568,7 @@ ephy_bookmarks_import_mozilla (EphyBookmarks *bookmarks,
GString *name = g_string_new (NULL);
gchar *parsedname;
GString *url = g_string_new (NULL);
- char *current_folder = NULL;
+ GList *folders = NULL, *l;
if (!(bf = fopen (filename, "r"))) {
g_warning ("Failed to open file: %s\n", filename);
@@ -576,19 +576,49 @@ ephy_bookmarks_import_mozilla (EphyBookmarks *bookmarks,
}
while (!feof (bf)) {
+ EphyNode *node;
NSItemType t;
t = ns_get_bookmark_item (bf, name, url);
switch (t)
{
case NS_FOLDER:
- g_free (current_folder);
- current_folder = g_strdup (name->str);
+ folders = g_list_prepend (folders, g_strdup (name->str));
+ break;
+ case NS_FOLDER_END:
+ if (folders)
+ {
+ /* remove first entry */
+ g_free (folders->data);
+ folders = g_list_delete_link (folders, folders);
+ }
break;
case NS_SITE:
parsedname = ns_parse_bookmark_item (name);
- bookmark_add (bookmarks, parsedname,
- url->str, current_folder);
+ node = bookmark_add (bookmarks, parsedname, url->str, NULL);
+
+ if (node == NULL)
+ {
+ node = ephy_bookmarks_find_bookmark (bookmarks, url->str);
+ }
+
+ for (l = folders; l != NULL; l = l->next)
+ {
+ char *topic = (char *) l->data;
+ EphyNode *keyword;
+
+ keyword = ephy_bookmarks_find_keyword (bookmarks, topic, FALSE);
+
+ if (keyword == NULL)
+ {
+ keyword = ephy_bookmarks_add_keyword (bookmarks, topic);
+ }
+
+ if (node != NULL && keyword != NULL)
+ {
+ ephy_bookmarks_set_keyword (bookmarks, keyword, node);
+ }
+ }
break;
default:
break;