summaryrefslogtreecommitdiff
path: root/programs
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2011-08-26 15:24:15 +0100
committerBastien Nocera <hadess@hadess.net>2011-08-26 15:24:15 +0100
commit88a8ec9bddf60275bb0b983695e61fe2698be276 (patch)
treeac681d658e17fa32e94e5429dea4a3e3d4744d39 /programs
parent0079ad29ed8de830af3f6e3533f246934931c941 (diff)
downloadgvfs-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.am4
-rw-r--r--programs/gvfs-mime.c169
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;
+}