1 /* Gnome Music Player Client (GMPC)
2 * Copyright (C) 2004-2012 Qball Cow <qball@gmpclient.org>
3 * Project homepage: http://gmpclient.org/
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #include <bug-information.h>
25 #include <unique/uniqueversion.h>
29 static void bug_information_generate_message(GtkTextBuffer
* buffer
)
34 GtkTextTag
*bold_tag
, *larger_tag
;
35 GtkTextTagTable
*table
;
37 /* get buffer's tag table */
38 table
= gtk_text_buffer_get_tag_table(buffer
);
40 bold_tag
= gtk_text_tag_new("bold");
41 g_object_set(G_OBJECT(bold_tag
), "weight", PANGO_WEIGHT_BOLD
, NULL
);
42 /* add bold_tag to tag table */
43 gtk_text_tag_table_add(table
, bold_tag
);
46 larger_tag
= gtk_text_tag_new("larger");
47 g_object_set(G_OBJECT(larger_tag
), "scale", PANGO_SCALE_X_LARGE
, NULL
);
48 /* add larger_tag to tag table */
49 gtk_text_tag_table_add(table
, larger_tag
);
52 gtk_text_buffer_get_start_iter(buffer
, &iter
);
54 /* insert program name */
55 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Gnome Music Player Client\n", -1, bold_tag
, larger_tag
, NULL
);
56 /* insert copyright */
57 gtk_text_buffer_insert_with_tags(buffer
, &iter
, GMPC_COPYRIGHT
"\n\n", -1, bold_tag
, NULL
);
60 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Tagline:\t", -1, bold_tag
, NULL
);
61 gtk_text_buffer_insert(buffer
, &iter
, GMPC_TAGLINE
"\n", -1);
64 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Version:\t", -1, bold_tag
, NULL
);
65 temp
= g_strdup_printf("%i.%i.%i\n", GMPC_MAJOR_VERSION
, GMPC_MINOR_VERSION
, GMPC_MICRO_VERSION
);
66 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
70 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Revision:\t", -1, bold_tag
, NULL
);
71 temp
= g_strdup_printf("%s\n", revision
);
72 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
76 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nSupport libraries:\n", -1, bold_tag
, larger_tag
, NULL
);
79 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Libmpd:\t", -1, bold_tag
, NULL
);
80 temp
= g_strdup_printf("%i.%i.%i\n", LIBMPD_MAJOR_VERSION
, LIBMPD_MINOR_VERSION
, LIBMPD_MICRO_VERSION
);
81 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
85 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Compile time Gtk+-2.0:\t", -1, bold_tag
, NULL
);
86 temp
= g_strdup_printf("%i.%i.%i\n", GTK_MAJOR_VERSION
, GTK_MINOR_VERSION
, GTK_MICRO_VERSION
);
87 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
90 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Runtime Gtk+-2.0:\t", -1, bold_tag
, NULL
);
91 temp
= g_strdup_printf("%i.%i.%i\n", gtk_major_version
, gtk_minor_version
, gtk_micro_version
);
92 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
96 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Glib-2.0:\t", -1, bold_tag
, NULL
);
97 temp
= g_strdup_printf("%i.%i.%i\n", GLIB_MAJOR_VERSION
, GLIB_MINOR_VERSION
, GLIB_MICRO_VERSION
);
98 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
102 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nLibunique:\t", -1, bold_tag
, NULL
);
103 temp
= g_strdup_printf("%s\n", UNIQUE_VERSION_S
);
104 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
108 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nPlatform:\t", -1, bold_tag
, NULL
);
110 gtk_text_buffer_insert(buffer
, &iter
, "Windows\n", -1);
111 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Windows version:\t", -1, bold_tag
, NULL
);
112 temp
= g_strdup_printf("%i\n", g_win32_get_windows_version());
113 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
117 gtk_text_buffer_insert(buffer
, &iter
, "Mac OsX\n", -1);
119 gtk_text_buffer_insert(buffer
, &iter
, "*nix\n", -1);
124 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nCompile flags:\n", -1, bold_tag
, larger_tag
, NULL
);
126 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nNLS Support:\t", -1, bold_tag
, NULL
);
128 gtk_text_buffer_insert(buffer
, &iter
, "Enabled", -1);
130 gtk_text_buffer_insert(buffer
, &iter
, "Disabled", -1);
133 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nMultimedia Keys:\t", -1, bold_tag
, NULL
);
135 gtk_text_buffer_insert(buffer
, &iter
, "Enabled", -1);
137 gtk_text_buffer_insert(buffer
, &iter
, "Disabled", -1);
140 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nAppIndicator Support:\t", -1, bold_tag
, NULL
);
141 #ifdef HAVE_APP_INDICATOR
142 gtk_text_buffer_insert(buffer
, &iter
, "Enabled", -1);
144 gtk_text_buffer_insert(buffer
, &iter
, "Disabled", -1);
147 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nLibspiff support:\t", -1, bold_tag
, NULL
);
149 gtk_text_buffer_insert(buffer
, &iter
, "Enabled", -1);
151 gtk_text_buffer_insert(buffer
, &iter
, "Disabled", -1);
154 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nLibunique support:\t", -1, bold_tag
, NULL
);
156 gtk_text_buffer_insert(buffer
, &iter
, "Enabled", -1);
158 gtk_text_buffer_insert(buffer
, &iter
, "Disabled", -1);
164 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\n\nExternal Plugins:\n", -1, bold_tag
, larger_tag
, NULL
);
165 for (i
= 0; i
< num_plugins
; i
++)
167 if (!gmpc_plugin_is_internal(plugins
[i
]))
169 const gchar
*name
= gmpc_plugin_get_name(plugins
[i
]);
170 const int *version
= gmpc_plugin_get_version(plugins
[i
]);
171 if(gmpc_plugin_get_enabled(plugins
[i
])) {
172 gtk_text_buffer_insert(buffer
, &iter
, "☑ ", -1);
174 gtk_text_buffer_insert(buffer
, &iter
, "☐ ", -1);
176 gtk_text_buffer_insert_with_tags(buffer
, &iter
, name
, -1, bold_tag
, NULL
);
177 temp
= g_strdup_printf("\t%i.%i.%i\n", version
[0], version
[1], version
[2]);
178 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
184 if (mpd_check_connected(connection
))
188 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nMusic Player Daemon:\n", -1, bold_tag
, larger_tag
, NULL
);
191 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "Version:\t", -1, bold_tag
, NULL
);
192 temp
= mpd_server_get_version(connection
);
193 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
197 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nSongs:\t", -1, bold_tag
, NULL
);
198 temp
= g_strdup_printf("%i", mpd_stats_get_total_songs(connection
));
199 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
203 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nHostname:\t", -1, bold_tag
, NULL
);
204 temp
= connection_get_hostname();
205 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
207 gtk_text_buffer_insert_with_tags(buffer
, &iter
, "\nUrl handlers:\t", -1, bold_tag
, NULL
);
208 handlers
= mpd_server_get_url_handlers(connection
);
211 temp
= g_strjoinv(",", handlers
);
212 g_strfreev(handlers
);
215 temp
= g_strdup("N/A");
216 gtk_text_buffer_insert(buffer
, &iter
, temp
, -1);
223 * Shows window with usefull information for a bug report.
226 void bug_information_window_new(GtkWidget
* window
)
229 GtkTextBuffer
*buffer
;
230 GtkWidget
*scrolled_window
, *text_view
;
231 PangoTabArray
*tab_array
;
233 /* Basic dialog with a close button */
234 dialog
= gtk_dialog_new_with_buttons(_("Bug information"),
235 (window
) ? (GtkWindow
*) playlist3_get_window() : NULL
,
236 GTK_DIALOG_DESTROY_WITH_PARENT
,
237 GTK_STOCK_CLOSE
, GTK_RESPONSE_YES
, NULL
);
239 /* Set default window size */
240 gtk_window_set_default_size(GTK_WINDOW(dialog
), 500, 800);
241 /* The buffer that holds the "report" */
242 buffer
= gtk_text_buffer_new(NULL
);
244 bug_information_generate_message(buffer
);
246 /* View to show the textbuffer */
247 text_view
= gtk_text_view_new();
250 tab_array
= pango_tab_array_new_with_positions(1, TRUE
, PANGO_TAB_LEFT
, 500);
251 gtk_text_view_set_accepts_tab(GTK_TEXT_VIEW(text_view
), TRUE
);
252 gtk_text_view_set_tabs(GTK_TEXT_VIEW(text_view
), tab_array
);
253 pango_tab_array_free(tab_array
);
256 gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view
), FALSE
);
258 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_view
), 12);
259 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_view
), 12);
261 /* Add the text buffer */
262 gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_view
), buffer
);
264 /* scrolled window, this allows the text view to scroll */
265 scrolled_window
= gtk_scrolled_window_new(NULL
, NULL
);
266 /* setup scrolled window */
267 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window
), GTK_SHADOW_ETCHED_IN
);
268 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
269 /* add text view to scrolled_window */
270 gtk_container_add(GTK_CONTAINER(scrolled_window
), text_view
);
271 /* add scrolled_window to dialog */
272 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(dialog
)), scrolled_window
, TRUE
, TRUE
, 0);
274 /* Add dialogs response handler */
275 g_signal_connect(G_OBJECT(dialog
), "response", G_CALLBACK(gtk_widget_destroy
), NULL
);
277 gtk_widget_show_all(dialog
);
280 gtk_dialog_run(GTK_DIALOG(dialog
));
286 * print text to information for a bug report.
288 void bug_information_file_new(FILE *fp
)
290 GtkTextBuffer
*buffer
;
291 GtkTextIter start
, end
;
293 /* The buffer that holds the "report" */
294 buffer
= gtk_text_buffer_new(NULL
);
296 bug_information_generate_message(buffer
);
298 gtk_text_buffer_get_start_iter(buffer
, &start
);
299 gtk_text_buffer_get_end_iter(buffer
, &end
);
300 output
= gtk_text_buffer_get_text(buffer
, &start
, &end
, FALSE
);
303 fprintf(fp
, "%s\n", output
);
306 g_object_unref(buffer
);