[Xfce4-commits] <midori:master> Add initial support for HTML bookmarks import
Christian Dywan
noreply at xfce.org
Sat Jan 29 09:04:03 CET 2011
Updating branch refs/heads/master
to 4ed49d001fbb05fa4ed8f41939ea522c7a660c67 (commit)
from 567d5a7d140456c8db9bf84d1e768f1f39a732ed (commit)
commit 4ed49d001fbb05fa4ed8f41939ea522c7a660c67
Author: Paweł Forysiuk <tuxator at o2.pl>
Date: Thu Jan 27 18:52:37 2011 +0100
Add initial support for HTML bookmarks import
midori/midori-array.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 97 insertions(+), 0 deletions(-)
diff --git a/midori/midori-array.c b/midori/midori-array.c
index 58a2aad..f6495e5 100644
--- a/midori/midori-array.c
+++ b/midori/midori-array.c
@@ -294,6 +294,73 @@ katze_array_from_xmlDocPtr (KatzeArray* array,
}
static gboolean
+katze_array_from_mozilla_file (KatzeArray* array,
+ const gchar* filename)
+{
+ gchar* line = NULL;
+ GIOChannel* channel = g_io_channel_new_file (filename, "r", 0);
+ KatzeArray* folder = array;
+ KatzeItem* item = NULL;
+
+ if (!channel)
+ return FALSE;
+
+ while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL)
+ == G_IO_STATUS_NORMAL)
+ {
+ g_strstrip (line);
+ /* parse lines with bookmarks data only, skip the rest */
+ if (!strncmp (line, "<D", 2) || !strncmp (line, "</D", 3))
+ {
+ gchar** element = g_strsplit_set (line, "<>", -1);
+ /* current item */
+ if (katze_str_equal (element[1], "DT"))
+ {
+ /* item is bookmark */
+ if (!strncmp (element[3], "A HREF", 6))
+ {
+ gchar** parts = g_strsplit (line, "\"", -1);
+ item = katze_item_new ();
+ katze_array_add_item (folder, item);
+ item->name = g_strdup (element[4]);
+ item->uri = g_strdup (parts[1]);
+ g_strfreev (parts);
+ }
+ /* item is folder */
+ if (!strncmp (element[3], "H3", 2))
+ {
+ item = (KatzeItem*)katze_array_new (KATZE_TYPE_ARRAY);
+ katze_array_add_item (folder, item);
+ folder = (KatzeArray*)item;
+ item->name = g_strdup (element[4]);
+ }
+ }
+ /* item description */
+ if (item && katze_str_equal (element[1], "DD"))
+ {
+ if (element[2])
+ item->text = g_strdup (element[2]);
+ item = NULL;
+ }
+ /* end of current folder, level-up */
+ if (katze_str_equal (element[1], "/DL"))
+ {
+ if (folder != array)
+ folder = katze_item_get_parent ((KatzeItem*)folder);
+ else
+ g_warning ("A level-up although we are at the top level");
+ continue;
+ }
+ g_strfreev (element);
+ }
+ continue;
+ }
+ g_io_channel_shutdown (channel, FALSE, 0);
+ g_io_channel_unref (channel);
+ return TRUE;
+}
+
+static gboolean
katze_array_from_opera_file (KatzeArray* array,
const gchar* filename)
{
@@ -422,6 +489,36 @@ midori_array_from_file (KatzeArray* array,
if (!format)
format = "";
+ /* mozilla html */
+ if (!*format && g_str_has_suffix (filename, ".html"))
+ {
+ FILE* file;
+ if ((file = g_fopen (filename, "r")))
+ {
+ gchar line[50];
+ while (fgets (line, 50, file))
+ {
+ g_strstrip (line);
+ if (katze_str_equal (line, "<!DOCTYPE NETSCAPE-Bookmark-file-1>"))
+ {
+ if (!katze_array_from_mozilla_file (array, filename))
+ {
+ /* Parsing failed */
+ fclose (file);
+ if (error)
+ *error = g_error_new_literal (G_FILE_ERROR,
+ G_FILE_ERROR_FAILED, _("Malformed document."));
+ return FALSE;
+ }
+ return TRUE;
+ }
+ else
+ break;
+ }
+ fclose (file);
+ }
+ }
+
/* Opera6 */
if (katze_str_equal (format, "opera")
|| (!*format && g_str_has_suffix (filename, ".adr")))
More information about the Xfce4-commits
mailing list