diff options
author | Bastien Nocera <hadess@hadess.net> | 2011-08-26 15:24:15 +0100 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2011-08-26 15:24:15 +0100 |
commit | 88a8ec9bddf60275bb0b983695e61fe2698be276 (patch) | |
tree | ac681d658e17fa32e94e5429dea4a3e3d4744d39 /programs | |
parent | 0079ad29ed8de830af3f6e3533f246934931c941 (diff) | |
download | gvfs-88a8ec9bddf60275bb0b983695e61fe2698be276.tar.gz |
programs: Add simple gvfs-mime test application
List the apps registered for a particular mime-type, and
set a particular application as the default handler for a
mime-type.
Diffstat (limited to 'programs')
-rw-r--r-- | programs/Makefile.am | 4 | ||||
-rw-r--r-- | programs/gvfs-mime.c | 169 |
2 files changed, 173 insertions, 0 deletions
diff --git a/programs/Makefile.am b/programs/Makefile.am index 0e9aa8f0..532f3474 100644 --- a/programs/Makefile.am +++ b/programs/Makefile.am @@ -27,6 +27,7 @@ bin_PROGRAMS = \ gvfs-monitor-file \ gvfs-monitor-dir \ gvfs-mkdir \ + gvfs-mime \ $(NULL) bin_SCRIPTS = \ @@ -86,4 +87,7 @@ gvfs_monitor_file_LDADD = $(libraries) gvfs_mkdir_SOURCES = gvfs-mkdir.c gvfs_mkdir_LDADD = $(libraries) +gvfs_mime_SOURCES = gvfs-mime.c +gvfs_mime_LDADD = $(libraries) + EXTRA_DIST = gvfs-less gvfs-bash-completion.sh diff --git a/programs/gvfs-mime.c b/programs/gvfs-mime.c new file mode 100644 index 00000000..3ef923f2 --- /dev/null +++ b/programs/gvfs-mime.c @@ -0,0 +1,169 @@ +/* GIO - GLib Input, Output and Streaming Library + * + * Copyright (C) 2011 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Bastien Nocera <hadess@hadess.net> + */ + +#include "config.h" + +#include <glib.h> +#include <locale.h> +#include <glib/gi18n.h> +#include <gio/gio.h> +#include <gio/gdesktopappinfo.h> + +static gboolean query = FALSE; +static gboolean set = FALSE; + +static GOptionEntry entries[] = +{ + { "query", 0, 0, G_OPTION_ARG_NONE, &query, N_("Query handler for mime-type"), NULL }, + { "set", 0, 0, G_OPTION_ARG_NONE, &set, N_("Set handler for mime-type"), NULL }, + { NULL } +}; + +static GAppInfo * +get_app_info_for_id (const char *id) +{ + GList *list, *l; + GAppInfo *ret_info; + + list = g_app_info_get_all (); + ret_info = NULL; + for (l = list; l != NULL; l = l->next) + { + GAppInfo *info; + + info = l->data; + if (ret_info == NULL && g_strcmp0 (g_app_info_get_id (info), id) == 0) + ret_info = info; + else + g_object_unref (info); + } + g_list_free (list); + + return ret_info; +} + +int +main (int argc, char *argv[]) +{ + GError *error; + GOptionContext *context; + const char *mimetype; + + setlocale (LC_ALL, ""); + + g_type_init (); + + error = NULL; + context = g_option_context_new (_("- get/set handler for <mimetype>")); + g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_parse (context, &argc, &argv, &error); + g_option_context_free (context); + + if (error != NULL || + query == set) + { + g_printerr (_("Error parsing commandline options: %s\n"), + error ? error->message : _("Specify one of --query and --set")); + g_printerr ("\n"); + g_printerr (_("Try \"%s --help\" for more information."), + g_get_prgname ()); + g_printerr ("\n"); + if (error != NULL) + g_error_free(error); + return 1; + } + + if (query && argc != 2) + { + g_printerr (_("Must specify a single mime-type.\n")); + g_printerr (_("Try \"%s --help\" for more information."), + g_get_prgname ()); + g_printerr ("\n"); + return 1; + } + else if (set && argc != 3) + { + g_printerr (_("Must specify the mime-type followed by the default handler.\n")); + g_printerr (_("Try \"%s --help\" for more information."), + g_get_prgname ()); + g_printerr ("\n"); + return 1; + } + + mimetype = argv[1]; + + if (query) + { + GAppInfo *info; + + info = g_app_info_get_default_for_type (mimetype, FALSE); + if (!info) + { + g_print (_("No default applications for '%s'\n"), mimetype); + } + else + { + GList *list, *l; + + g_print (_("Default application for '%s': %s\n"), mimetype, g_app_info_get_id (info)); + g_object_unref (info); + + list = g_app_info_get_all_for_type (mimetype); + if (list != NULL) + g_print (_("Registered applications:\n")); + for (l = list; l != NULL; l = l->next) + { + info = l->data; + g_print ("\t%s\n", g_app_info_get_id (info)); + g_object_unref (info); + } + g_list_free (list); + } + } + else if (set) + { + const char *handler; + GAppInfo *info; + + handler = argv[2]; + + info = get_app_info_for_id (handler); + if (info == NULL) + { + g_printerr (_("Failed to load info for handler '%s'\n"), handler); + return 1; + } + + if (g_app_info_set_as_default_for_type (info, mimetype, &error) == FALSE) + { + g_printerr (_("Failed to set '%s' as the default handler for '%s': %s\n"), + handler, mimetype, error->message); + g_error_free (error); + g_object_unref (info); + return 1; + } + g_print ("Set %s as the default for %s\n", g_app_info_get_id (info), mimetype); + g_object_unref (info); + } + + return 0; +} |