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 : : }
|