diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 126 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-import.c | 21 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-import.h | 8 |
3 files changed, 98 insertions, 57 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index 561ac497a..7af62ced3 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -540,29 +540,74 @@ show_properties_dialog (EphyBookmarksEditor *editor, (editor->priv->bookmarks, bookmark, GTK_WIDGET (editor)); } -static void -add_bookmarks_source (GtkListStore *store, - const char *desc, - const char *dir, - const char *filename, - int max_depth) +static GSList * +add_bookmarks_files (const char *dir, + const char *filename, + int max_depth) { - GtkTreeIter iter; - GSList *l; + GSList *list; char *path; path = g_build_filename (g_get_home_dir (), dir, NULL); - l = ephy_file_find (path, filename, max_depth); + list = ephy_file_find (path, filename, max_depth); g_free (path); - if (l) + return list; +} + +static void +add_bookmarks_source (const char *file, + GtkListStore *store) +{ + GtkTreeIter iter; + char **path; + char *description = NULL; + int len, i; + + path = g_strsplit (file, G_DIR_SEPARATOR_S, -1); + g_return_if_fail (path != NULL); + + len = g_strv_length (path); + + for (i = len - 2; i >= 0 && description == NULL; --i) { - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, desc, 1, l->data, -1); + const char *p = (const char *) path[i]; + + g_return_if_fail (p != NULL); + + if (strcmp (p, "firefox") == 0) + { + description = g_strdup (_("Firefox")); + } + else if (strcmp (p, ".firefox") == 0) + { + description = g_strdup (_("Firebird")); + } + else if (strcmp (p, ".phoenix") == 0) + { + description = g_strdup (_("Firebird")); + } + else if (strcmp (p, ".mozilla") == 0) + { + description = g_strdup_printf (_("Mozilla \"%s\" profile"), path[i+1]); + } + else if (strcmp (p, ".galeon") == 0) + { + description = g_strdup (_("Galeon")); + } + else if (strcmp (p, "konqueror") == 0) + { + description = g_strdup (_("Konqueror")); + } } - g_slist_foreach (l, (GFunc) g_free, NULL); - g_slist_free (l); + if (description != NULL) + { + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, 0, description, 1, file, -1); + + g_free (description); + } } static void @@ -587,25 +632,23 @@ import_from_file_response_cb (GtkDialog *dialog, gint response, } static void -import_dialog_response_cb (GtkDialog *dialog, gint response, +import_dialog_response_cb (GtkDialog *dialog, + gint response, EphyBookmarksEditor *editor) { if (response == GTK_RESPONSE_OK) { GtkTreeIter iter; - char *filename; + const char *filename; GtkWidget *combo; GtkTreeModel *model; - int active; GValue value = { 0, }; combo = g_object_get_data (G_OBJECT (dialog), "combo_box"); model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo)); - active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - gtk_tree_model_iter_nth_child (model, &iter, NULL, active); + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter); gtk_tree_model_get_value (model, &iter, 1, &value); - filename = g_strdup (g_value_get_string (&value)); - g_value_unset (&value); + filename = g_value_get_string (&value); if (filename == NULL) { @@ -619,7 +662,7 @@ import_dialog_response_cb (GtkDialog *dialog, gint response, ephy_file_chooser_add_mime_filter (dialog, - _("Firefox/Firebird/Mozilla bookmarks"), + _("Firefox/Mozilla bookmarks"), "application/x-mozilla-bookmarks", NULL); ephy_file_chooser_add_mime_filter @@ -647,7 +690,7 @@ import_dialog_response_cb (GtkDialog *dialog, gint response, ephy_bookmarks_import (editor->priv->bookmarks, filename); } - g_free (filename); + g_value_unset (&value); } gtk_widget_destroy (GTK_WIDGET (dialog)); @@ -747,16 +790,17 @@ cmd_bookmarks_import (GtkAction *action, GtkListStore *store; GtkTreeIter iter; GtkTreeModel *sortmodel; + GSList *files; dialog = gtk_dialog_new_with_buttons (_("Import Bookmarks"), - GTK_WINDOW (editor), - GTK_DIALOG_DESTROY_WITH_PARENT | - GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - _("I_mport"), - GTK_RESPONSE_OK, - NULL); + GTK_WINDOW (editor), + GTK_DIALOG_DESTROY_WITH_PARENT | + GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + _("I_mport"), + GTK_RESPONSE_OK, + NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); @@ -776,16 +820,16 @@ cmd_bookmarks_import (GtkAction *action, store = GTK_LIST_STORE (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING)); - add_bookmarks_source (store, _("Firebird"), - FIREBIRD_BOOKMARKS_DIR, "bookmarks.html", 4); - add_bookmarks_source (store, _("Firefox"), - FIREFOX_BOOKMARKS_DIR, "bookmarks.html", 4); - add_bookmarks_source (store, _("Galeon"), - GALEON_BOOKMARKS_DIR, "bookmarks.xbel", 0); - add_bookmarks_source (store, _("Konqueror"), - KDE_BOOKMARKS_DIR, "bookmarks.xml", 0); - add_bookmarks_source (store, _("Mozilla"), - MOZILLA_BOOKMARKS_DIR, "bookmarks.html", 4); + files = add_bookmarks_files (FIREFOX_BOOKMARKS_DIR_0, "bookmarks.html", 2); + files = g_slist_concat (add_bookmarks_files (FIREFOX_BOOKMARKS_DIR_1, "bookmarks.html", 2), files); + /* FIREFOX_BOOKMARKS_DIR_2 is subdir of MOZILLA_BOOKMARKS_DIR, so don't search it twice */ + files = g_slist_concat (add_bookmarks_files (MOZILLA_BOOKMARKS_DIR, "bookmarks.html", 2), files); + files = g_slist_concat (add_bookmarks_files (GALEON_BOOKMARKS_DIR, "bookmarks.xbel", 0), files); + files = g_slist_concat (add_bookmarks_files (KDE_BOOKMARKS_DIR, "bookmarks.xml", 0), files); + + g_slist_foreach (files, (GFunc) add_bookmarks_source, store); + g_slist_foreach (files, (GFunc) g_free, NULL); + g_slist_free (files); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, _("File"), 1, NULL, -1); diff --git a/src/bookmarks/ephy-bookmarks-import.c b/src/bookmarks/ephy-bookmarks-import.c index 52fb3386d..bc1a5ed59 100644 --- a/src/bookmarks/ephy-bookmarks-import.c +++ b/src/bookmarks/ephy-bookmarks-import.c @@ -1,7 +1,7 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2003, 2004 Marco Pesenti Gritti - * Copyright (C) 2003, 2004 Christian Persch + * Copyright (C) 2003, 2004, 2005 Christian Persch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -68,24 +68,20 @@ gboolean ephy_bookmarks_import (EphyBookmarks *bookmarks, const char *filename) { - GnomeVFSURI *uri; const char *type; gboolean success = FALSE; if (eel_gconf_get_boolean (CONF_LOCKDOWN_DISABLE_BOOKMARK_EDITING)) return FALSE; - uri = gnome_vfs_uri_new (filename); - type = gnome_vfs_get_mime_type_common (uri); + type = gnome_vfs_get_file_mime_type (filename, NULL, FALSE); - LOG ("Importing bookmarks of type %s", type) + LOG ("Importing bookmarks of type %s", type ? type : "(null)") if (type == NULL) { - gnome_vfs_uri_unref (uri); - return FALSE; + g_warning ("Couldn't determine the type of the bookmarks file %s!\n", filename); } - - if (strcmp (type, "application/x-mozilla-bookmarks") == 0) + else if (strcmp (type, "application/x-mozilla-bookmarks") == 0) { success = ephy_bookmarks_import_mozilla (bookmarks, filename); } @@ -99,8 +95,9 @@ ephy_bookmarks_import (EphyBookmarks *bookmarks, success = ephy_bookmarks_import_rdf (bookmarks, filename); } else if (strstr (filename, MOZILLA_BOOKMARKS_DIR) != NULL || - strstr (filename, FIREBIRD_BOOKMARKS_DIR) != NULL || - strstr (filename, FIREFOX_BOOKMARKS_DIR) != NULL) + strstr (filename, FIREFOX_BOOKMARKS_DIR_0) != NULL || + strstr (filename, FIREFOX_BOOKMARKS_DIR_1) != NULL || + strstr (filename, FIREFOX_BOOKMARKS_DIR_2) != NULL) { success = ephy_bookmarks_import_mozilla (bookmarks, filename); } @@ -111,8 +108,6 @@ ephy_bookmarks_import (EphyBookmarks *bookmarks, } /* else FIXME: put up some UI to warn user about unrecognised format? */ - gnome_vfs_uri_unref (uri); - return success; } diff --git a/src/bookmarks/ephy-bookmarks-import.h b/src/bookmarks/ephy-bookmarks-import.h index 8938baef7..43e5db551 100644 --- a/src/bookmarks/ephy-bookmarks-import.h +++ b/src/bookmarks/ephy-bookmarks-import.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2003 Marco Pesenti Gritti + * Copyright (C) 2003, 2004 Marco Pesenti Gritti + * Copyright (C) 2003, 2004, 2005 Christian Persch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,8 +27,9 @@ G_BEGIN_DECLS #define MOZILLA_BOOKMARKS_DIR ".mozilla" -#define FIREBIRD_BOOKMARKS_DIR ".phoenix" -#define FIREFOX_BOOKMARKS_DIR ".firefox" +#define FIREFOX_BOOKMARKS_DIR_0 ".phoenix" +#define FIREFOX_BOOKMARKS_DIR_1 ".firefox" +#define FIREFOX_BOOKMARKS_DIR_2 ".mozilla/firefox" #define GALEON_BOOKMARKS_DIR ".galeon" #define KDE_BOOKMARKS_DIR ".kde/share/apps/konqueror" |