'smart qotes' now will replace '<', '>' and '&' inside 'pre' and 'code' tags
[k8lowj.git] / src / music.c
blob87455c2e84b36a5541c5b2ff8170bd93b6c1278f
1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2000-2003 Evan Martin <evan@livejournal.com>
4 * vim: tabstop=4 shiftwidth=4 noexpandtab :
5 */
7 #include "gtk-all.h"
9 #include "conf.h"
10 #include "music.h"
12 const CommandList music_commands[] = {
13 { N_("None"), NULL },
14 { "Music Player Daemon", "sh -c \"mpc | grep -v '^volume: .* repeat: .* random: .*'\"" },
15 { "Rhythmbox", "rhythmbox --print-playing" },
16 { "XMMS / Beep", "logjam-xmms-client" },
17 { "amaroK", "dcop amarok player nowPlaying" },
18 { NULL, NULL }
21 MusicSource
22 music_current_source(void) {
23 int i;
25 if (!conf.music_command)
26 return MUSIC_SOURCE_NONE;
28 for (i = 0; i < MUSIC_SOURCE_COUNT; i++) {
29 if (music_commands[i].label && music_commands[i].command &&
30 (strcmp(music_commands[i].command, conf.music_command) == 0))
31 return i;
33 return MUSIC_SOURCE_CUSTOM;
36 GQuark
37 music_error_quark(void) {
38 static GQuark quark = 0;
39 if (quark == 0)
40 quark = g_quark_from_static_string("music-error-quark");
41 return quark;
44 #ifndef G_OS_WIN32
45 static gboolean
46 music_command_can_detect(GError **err) {
47 if (!conf.music_command || !conf.music_command[0]) {
48 g_set_error(err, MUSIC_ERROR, MUSIC_COMMAND_LINE_ERROR,
49 _("No music command line is set."));
50 return FALSE;
52 return TRUE;
55 static char*
56 music_command_detect(const char *command, GError **err) {
57 gchar *std_out, *std_err, *p, *cnv;
58 gint exit_status;
60 if (!g_spawn_command_line_sync(command,
61 &std_out, &std_err, &exit_status, err))
62 return NULL;
64 if (exit_status != 0) {
65 g_set_error(err, MUSIC_ERROR, MUSIC_COMMAND_ERROR, std_err);
66 g_free(std_err);
67 return NULL;
69 g_free(std_err);
71 /* we take the first line of this output. */
72 for (p = std_out; *p; p++) {
73 if (*p == '\n') {
74 *p = 0;
75 break;
78 if (p == std_out) {
79 g_set_error(err, MUSIC_ERROR, MUSIC_COMMAND_ERROR,
80 _("Command produced no output."));
81 g_free(std_out);
82 return NULL;
84 /* Check if result is correct UTF-8 */
85 if (g_utf8_validate(std_out, -1, NULL))
86 return std_out;
87 /* Try converting from the current locale to UTF-8 */
88 cnv = g_locale_to_utf8(std_out, -1, NULL, NULL, err);
89 g_free(std_out);
90 return cnv;
93 gboolean
94 music_can_detect(GError **err) {
95 return music_command_can_detect(err);
98 char*
99 music_detect(GError **err) {
100 if (conf.music_command)
101 return music_command_detect(conf.music_command, err);
102 return NULL;
104 #else
105 gboolean music_can_detect(GError **err) {
106 g_set_error(err, MUSIC_ERROR, MUSIC_UNIMPLEMENTED_ERROR,
107 _("Music detection is not implemented on this platform."));
108 return FALSE;
110 char* music_detect(GError **err) {
111 g_set_error(err, MUSIC_ERROR, MUSIC_UNIMPLEMENTED_ERROR,
112 _("Music detection is not implemented on this platform."));
113 return FALSE;
115 #endif /* G_OS_WIN32 */