diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-import.c | 50 | ||||
-rw-r--r-- | src/ephy-main.c | 70 |
2 files changed, 100 insertions, 20 deletions
diff --git a/src/bookmarks/ephy-bookmarks-import.c b/src/bookmarks/ephy-bookmarks-import.c index 098a96d9d..651fa2fa8 100644 --- a/src/bookmarks/ephy-bookmarks-import.c +++ b/src/bookmarks/ephy-bookmarks-import.c @@ -69,44 +69,60 @@ ephy_bookmarks_import (EphyBookmarks *bookmarks, const char *filename) { const char *type; + char *basename; gboolean success = FALSE; if (eel_gconf_get_boolean (CONF_LOCKDOWN_DISABLE_BOOKMARK_EDITING)) return FALSE; + g_return_val_if_fail (filename != NULL, FALSE); + type = gnome_vfs_get_file_mime_type (filename, NULL, FALSE); LOG ("Importing bookmarks of type %s", type ? type : "(null)"); - if (type == NULL) - { - g_warning ("Couldn't determine the type of the bookmarks file %s!\n", filename); - } - else if (strcmp (type, "application/x-mozilla-bookmarks") == 0) + if (type != NULL && (strcmp (type, "application/rdf+xml") == 0 || + strcmp (type, "text/rdf") == 0)) { - success = ephy_bookmarks_import_mozilla (bookmarks, filename); + success = ephy_bookmarks_import_rdf (bookmarks, filename); } - else if (strcmp (type, "application/x-xbel") == 0) + else if ((type != NULL && strcmp (type, "application/x-xbel") == 0) || + strstr (filename, GALEON_BOOKMARKS_DIR) != NULL || + strstr (filename, KDE_BOOKMARKS_DIR) != NULL) { success = ephy_bookmarks_import_xbel (bookmarks, filename); } - else if (strcmp (type, "application/rdf+xml") == 0 || - strcmp (type, "text/rdf") == 0) - { - success = ephy_bookmarks_import_rdf (bookmarks, filename); - } - else if (strstr (filename, MOZILLA_BOOKMARKS_DIR) != NULL || + else if ((type != NULL && strcmp (type, "application/x-mozilla-bookmarks") == 0) || + strstr (filename, MOZILLA_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); } - else if (strstr (filename, GALEON_BOOKMARKS_DIR) != NULL || - strstr (filename, KDE_BOOKMARKS_DIR) != NULL) + else if (type == NULL) { - success = ephy_bookmarks_import_xbel (bookmarks, filename); + basename = g_path_get_basename (filename); + + if (g_str_has_suffix (basename, ".rdf")) + { + success = ephy_bookmarks_import_rdf (bookmarks, filename); + } + else if (g_str_has_suffix (basename, ".xbel")) + { + success = ephy_bookmarks_import_xbel (bookmarks, filename); + } + else if (g_str_has_suffix (basename, ".html")) + { + success = ephy_bookmarks_import_mozilla (bookmarks, filename); + } + else + { + /* else FIXME: put up some UI to warn user about unrecognised format? */ + g_warning ("Couldn't determine the type of the bookmarks file %s!\n", filename); + } + + g_free (basename); } - /* else FIXME: put up some UI to warn user about unrecognised format? */ return success; } diff --git a/src/ephy-main.c b/src/ephy-main.c index 9b97e1416..51a422f8b 100644 --- a/src/ephy-main.c +++ b/src/ephy-main.c @@ -449,7 +449,64 @@ main (int argc, /* check libxml2 API version epiphany was compiled with against the * version we're running with. */ - LIBXML_TEST_VERSION + LIBXML_TEST_VERSION; + + /* If we're given -remote arguments, translate them */ + if (argc >= 2 && + strcmp (argv[1], "-remote") == 0) + { + const char *opening, *closing; + char *command, *argument; + char **arguments; + + if (argc != 3) + { + g_print ("-remote allows exactly one argument\n"); + exit (1); + } + + opening = strchr (argv[2], '('); + closing = strchr (argv[2], ')'); + + if (opening == NULL || + closing == NULL || + opening == argv[2] || + opening + 1 >= closing) + { + g_print ("Invalid argument for -remote\n"); + exit (1); + } + + command = g_strstrip (g_strndup (argv[2], opening - argv[2])); + + /* See http://lxr.mozilla.org/seamonkey/source/xpfe/components/xremote/src/XRemoteService.cpp + * for the commands that mozilla supports; we'll just support openURL here. + */ + if (g_ascii_strcasecmp (command, "openURL") != 0) + { + g_print ("-remote command \"%s\" not supported\n", command); + g_free (command); + exit (1); + } + + g_free (command); + + argument = g_strstrip (g_strndup (opening + 1, closing - opening - 1)); + arguments = g_strsplit (argument, ",", -1); + g_free (argument); + if (arguments == NULL) + { + g_print ("Invalid argument for -remote\n"); + + exit (1); + } + + /* replace arguments */ + argv[1] = g_strstrip (g_strdup (arguments[0])); + argc = 2; + + g_strfreev (arguments); + } /* Initialise our debug helpers */ ephy_debug_init (); @@ -569,14 +626,21 @@ main (int argc, for (i = 0; arguments[i] != NULL; ++i) { - char *uri, *path = NULL; + char *uri, *path; +#ifdef PATH_MAX + char rpath[PATH_MAX]; +#else + char *rpath = NULL; +#endif - path = realpath (arguments[i], NULL); + path = realpath (arguments[i], rpath); if (path != NULL) { uri = g_locale_to_utf8 (path, -1, NULL, NULL, &error); +#ifndef PATH_MAX free (path); +#endif } else { |