| #include <gio/gio.h> | |
| #include <gio/gdesktopappinfo.h> | |
| #include <locale.h> | |
| #include <stdlib.h> | |
| static void | |
| print (const gchar *str) | |
| { | |
| g_print ("%s\n", str ? str : "nil"); | |
| } | |
| static void | |
| print_app_list (GList *list) | |
| { | |
| while (list) | |
| { | |
| GAppInfo *info = list->data; | |
| print (g_app_info_get_id (info)); | |
| list = g_list_delete_link (list, list); | |
| g_object_unref (info); | |
| } | |
| } | |
| static void | |
| quit (gpointer user_data) | |
| { | |
| g_print ("appinfo database changed.\n"); | |
| exit (0); | |
| } | |
| int | |
| main (int argc, char **argv) | |
| { | |
| setlocale (LC_ALL, ""); | |
| if (argv[1] == NULL || g_str_equal (argv[1], "--help")) | |
| g_print ("Usage:\n" | |
| " apps --help\n" | |
| " apps COMMAND [COMMAND_OPTIONS]\n" | |
| "\n" | |
| "COMMANDS:\n" | |
| " list\n" | |
| " search [--should-show-only] TEXT_TO_SEARCH\n" | |
| " implementations INTERFACE_NAME\n" | |
| " show-info DESKTOP_FILE\n" | |
| " default-for-type MIME_TYPE\n" | |
| " recommended-for-type MIME_TYPE\n" | |
| " all-for-type MIME_TYPE\n" | |
| " fallback-for-type MIME_TYPE\n" | |
| " should-show DESKTOP_FILE\n" | |
| " monitor\n" | |
| "\n" | |
| "Examples:\n" | |
| " apps search --should-show-only ter\n" | |
| " apps show-info org.gnome.Nautilus.desktop\n" | |
| " apps default-for-type image/png\n" | |
| "\n"); | |
| else if (g_str_equal (argv[1], "list")) | |
| { | |
| GList *all, *i; | |
| all = g_app_info_get_all (); | |
| for (i = all; i; i = i->next) | |
| g_print ("%s%s", g_app_info_get_id (i->data), i->next ? " " : "\n"); | |
| g_list_free_full (all, g_object_unref); | |
| } | |
| else if (g_str_equal (argv[1], "search")) | |
| { | |
| gchar ***results; | |
| gboolean should_show_only; | |
| gint i, j; | |
| should_show_only = argc > 3 && g_str_equal (argv[2], "--should-show-only"); | |
| results = g_desktop_app_info_search (argv[ should_show_only ? 3 : 2 ]); | |
| for (i = 0; results[i]; i++) | |
| { | |
| for (j = 0; results[i][j]; j++) | |
| { | |
| if (should_show_only) | |
| { | |
| GDesktopAppInfo *info; | |
| gboolean should_show; | |
| info = g_desktop_app_info_new (results[i][j]); | |
| if (info) | |
| { | |
| should_show = g_app_info_should_show (G_APP_INFO (info)); | |
| g_object_unref (info); | |
| if (!should_show) | |
| continue; | |
| } | |
| } | |
| g_print ("%s%s", j ? " " : "", results[i][j]); | |
| } | |
| g_print ("\n"); | |
| g_strfreev (results[i]); | |
| } | |
| g_free (results); | |
| } | |
| else if (g_str_equal (argv[1], "implementations")) | |
| { | |
| GList *results; | |
| results = g_desktop_app_info_get_implementations (argv[2]); | |
| print_app_list (results); | |
| } | |
| else if (g_str_equal (argv[1], "show-info")) | |
| { | |
| GAppInfo *info; | |
| info = (GAppInfo *) g_desktop_app_info_new (argv[2]); | |
| if (info) | |
| { | |
| print (g_app_info_get_id (info)); | |
| print (g_app_info_get_name (info)); | |
| print (g_app_info_get_display_name (info)); | |
| print (g_app_info_get_description (info)); | |
| g_object_unref (info); | |
| } | |
| } | |
| else if (g_str_equal (argv[1], "default-for-type")) | |
| { | |
| GAppInfo *info; | |
| info = g_app_info_get_default_for_type (argv[2], FALSE); | |
| if (info) | |
| { | |
| print (g_app_info_get_id (info)); | |
| g_object_unref (info); | |
| } | |
| } | |
| else if (g_str_equal (argv[1], "recommended-for-type")) | |
| { | |
| GList *list; | |
| list = g_app_info_get_recommended_for_type (argv[2]); | |
| print_app_list (list); | |
| } | |
| else if (g_str_equal (argv[1], "all-for-type")) | |
| { | |
| GList *list; | |
| list = g_app_info_get_all_for_type (argv[2]); | |
| print_app_list (list); | |
| } | |
| else if (g_str_equal (argv[1], "fallback-for-type")) | |
| { | |
| GList *list; | |
| list = g_app_info_get_fallback_for_type (argv[2]); | |
| print_app_list (list); | |
| } | |
| else if (g_str_equal (argv[1], "should-show")) | |
| { | |
| GAppInfo *info; | |
| info = (GAppInfo *) g_desktop_app_info_new (argv[2]); | |
| if (info) | |
| { | |
| g_print ("%s\n", g_app_info_should_show (info) ? "true" : "false"); | |
| g_object_unref (info); | |
| } | |
| } | |
| else if (g_str_equal (argv[1], "monitor")) | |
| { | |
| GAppInfoMonitor *monitor; | |
| GAppInfo *info; | |
| monitor = g_app_info_monitor_get (); | |
| info = (GAppInfo *) g_desktop_app_info_new ("this-desktop-file-does-not-exist"); | |
| g_assert (!info); | |
| g_signal_connect (monitor, "changed", G_CALLBACK (quit), NULL); | |
| while (1) | |
| g_main_context_iteration (NULL, TRUE); | |
| } | |
| return 0; | |
| } |