Branch data Line data Source code
1 : : #include <gio/gio.h> 2 : : #include <gio/gdesktopappinfo.h> 3 : : #include <locale.h> 4 : : #include <stdlib.h> 5 : : 6 : : static void 7 : 15 : print (const gchar *str) 8 : : { 9 [ + + ]: 15 : g_print ("%s\n", str ? str : "nil"); 10 : 15 : } 11 : : 12 : : static void 13 : 4 : print_app_list (GList *list) 14 : : { 15 [ + + ]: 10 : while (list) 16 : : { 17 : 6 : GAppInfo *info = list->data; 18 : 6 : print (g_app_info_get_id (info)); 19 : 6 : list = g_list_delete_link (list, list); 20 : 6 : g_object_unref (info); 21 : : } 22 : 4 : } 23 : : 24 : : static void 25 : 0 : quit (gpointer user_data) 26 : : { 27 : 0 : g_print ("appinfo database changed.\n"); 28 : 0 : exit (0); 29 : : } 30 : : 31 : : int 32 : 48 : main (int argc, char **argv) 33 : : { 34 : 48 : setlocale (LC_ALL, ""); 35 : : 36 [ + - - + ]: 48 : if (argv[1] == NULL || g_str_equal (argv[1], "--help")) 37 : 0 : g_print ("Usage:\n" 38 : : " apps --help\n" 39 : : " apps COMMAND [COMMAND_OPTIONS]\n" 40 : : "\n" 41 : : "COMMANDS:\n" 42 : : " list\n" 43 : : " search [--should-show-only] TEXT_TO_SEARCH\n" 44 : : " implementations INTERFACE_NAME\n" 45 : : " show-info DESKTOP_FILE\n" 46 : : " default-for-type MIME_TYPE\n" 47 : : " recommended-for-type MIME_TYPE\n" 48 : : " all-for-type MIME_TYPE\n" 49 : : " fallback-for-type MIME_TYPE\n" 50 : : " should-show DESKTOP_FILE\n" 51 : : " monitor\n" 52 : : "\n" 53 : : "Examples:\n" 54 : : " apps search --should-show-only ter\n" 55 : : " apps show-info org.gnome.Nautilus.desktop\n" 56 : : " apps default-for-type image/png\n" 57 : : "\n"); 58 [ + + ]: 48 : else if (g_str_equal (argv[1], "list")) 59 : : { 60 : : GList *all, *i; 61 : : 62 : 4 : all = g_app_info_get_all (); 63 [ + + ]: 63 : for (i = all; i; i = i->next) 64 [ + + ]: 59 : g_print ("%s%s", g_app_info_get_id (i->data), i->next ? " " : "\n"); 65 : 4 : g_list_free_full (all, g_object_unref); 66 : : } 67 [ + + ]: 44 : else if (g_str_equal (argv[1], "search")) 68 : : { 69 : : gchar ***results; 70 : : gboolean should_show_only; 71 : : gint i, j; 72 : : 73 [ - + - - ]: 26 : should_show_only = argc > 3 && g_str_equal (argv[2], "--should-show-only"); 74 [ - + ]: 26 : results = g_desktop_app_info_search (argv[ should_show_only ? 3 : 2 ]); 75 [ + + ]: 50 : for (i = 0; results[i]; i++) 76 : : { 77 [ + + ]: 49 : for (j = 0; results[i][j]; j++) 78 : : { 79 [ - + ]: 25 : if (should_show_only) 80 : : { 81 : : GDesktopAppInfo *info; 82 : : gboolean should_show; 83 : : 84 : 0 : info = g_desktop_app_info_new (results[i][j]); 85 [ # # ]: 0 : if (info) 86 : : { 87 : 0 : should_show = g_app_info_should_show (G_APP_INFO (info)); 88 : 0 : g_object_unref (info); 89 [ # # ]: 0 : if (!should_show) 90 : 0 : continue; 91 : : } 92 : : } 93 [ + + ]: 25 : g_print ("%s%s", j ? " " : "", results[i][j]); 94 : : } 95 : 24 : g_print ("\n"); 96 : 24 : g_strfreev (results[i]); 97 : : } 98 : 26 : g_free (results); 99 : : } 100 [ + + ]: 18 : else if (g_str_equal (argv[1], "implementations")) 101 : : { 102 : : GList *results; 103 : : 104 : 4 : results = g_desktop_app_info_get_implementations (argv[2]); 105 : 4 : print_app_list (results); 106 : : } 107 [ + + ]: 14 : else if (g_str_equal (argv[1], "show-info")) 108 : : { 109 : : GAppInfo *info; 110 : : 111 : 2 : info = (GAppInfo *) g_desktop_app_info_new (argv[2]); 112 [ + - ]: 2 : if (info) 113 : : { 114 : 2 : print (g_app_info_get_id (info)); 115 : 2 : print (g_app_info_get_name (info)); 116 : 2 : print (g_app_info_get_display_name (info)); 117 : 2 : print (g_app_info_get_description (info)); 118 : 2 : g_object_unref (info); 119 : : } 120 : : } 121 [ + + ]: 12 : else if (g_str_equal (argv[1], "default-for-type")) 122 : : { 123 : : GAppInfo *info; 124 : : 125 : 1 : info = g_app_info_get_default_for_type (argv[2], FALSE); 126 : : 127 [ + - ]: 1 : if (info) 128 : : { 129 : 1 : print (g_app_info_get_id (info)); 130 : 1 : g_object_unref (info); 131 : : } 132 : : } 133 [ - + ]: 11 : else if (g_str_equal (argv[1], "recommended-for-type")) 134 : : { 135 : : GList *list; 136 : : 137 : 0 : list = g_app_info_get_recommended_for_type (argv[2]); 138 : 0 : print_app_list (list); 139 : : } 140 [ - + ]: 11 : else if (g_str_equal (argv[1], "all-for-type")) 141 : : { 142 : : GList *list; 143 : : 144 : 0 : list = g_app_info_get_all_for_type (argv[2]); 145 : 0 : print_app_list (list); 146 : : } 147 : : 148 [ - + ]: 11 : else if (g_str_equal (argv[1], "fallback-for-type")) 149 : : { 150 : : GList *list; 151 : : 152 : 0 : list = g_app_info_get_fallback_for_type (argv[2]); 153 : 0 : print_app_list (list); 154 : : } 155 : : 156 [ + - ]: 11 : else if (g_str_equal (argv[1], "should-show")) 157 : : { 158 : : GAppInfo *info; 159 : : 160 : 11 : info = (GAppInfo *) g_desktop_app_info_new (argv[2]); 161 [ + - ]: 11 : if (info) 162 : : { 163 [ + + ]: 11 : g_print ("%s\n", g_app_info_should_show (info) ? "true" : "false"); 164 : 11 : g_object_unref (info); 165 : : } 166 : : } 167 : : 168 [ # # ]: 0 : else if (g_str_equal (argv[1], "monitor")) 169 : : { 170 : : GAppInfoMonitor *monitor; 171 : : GAppInfo *info; 172 : : 173 : 0 : monitor = g_app_info_monitor_get (); 174 : : 175 : 0 : info = (GAppInfo *) g_desktop_app_info_new ("this-desktop-file-does-not-exist"); 176 : 0 : g_assert (!info); 177 : : 178 : 0 : g_signal_connect (monitor, "changed", G_CALLBACK (quit), NULL); 179 : : 180 : : while (1) 181 : 0 : g_main_context_iteration (NULL, TRUE); 182 : : } 183 : : 184 : 48 : return 0; 185 : : }