#include #include #include #include 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\nCOMMANDS:\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\nExamples:\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; }