removed libsoup support
[k8lowj.git] / src / music.c
blob924929499904d370653cb2f62bb91499d6411a51
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 static gboolean
45 music_command_can_detect(GError **err) {
46 if (!conf.music_command || !conf.music_command[0]) {
47 g_set_error(err, MUSIC_ERROR, MUSIC_COMMAND_LINE_ERROR, "%s",
48 _("No music command line is set."));
49 return FALSE;
51 return TRUE;
54 static char*
55 music_command_detect(const char *command, GError **err) {
56 gchar *std_out, *std_err, *p, *cnv;
57 gint exit_status;
59 if (!g_spawn_command_line_sync(command,
60 &std_out, &std_err, &exit_status, err))
61 return NULL;
63 if (exit_status != 0) {
64 g_set_error(err, MUSIC_ERROR, MUSIC_COMMAND_ERROR, "%s", std_err);
65 g_free(std_err);
66 return NULL;
68 g_free(std_err);
70 /* we take the first line of this output. */
71 for (p = std_out; *p; p++) {
72 if (*p == '\n') {
73 *p = 0;
74 break;
77 if (p == std_out) {
78 g_set_error(err, MUSIC_ERROR, MUSIC_COMMAND_ERROR, "%s",
79 _("Command produced no output."));
80 g_free(std_out);
81 return NULL;
83 /* Check if result is correct UTF-8 */
84 if (g_utf8_validate(std_out, -1, NULL))
85 return std_out;
86 /* Try converting from the current locale to UTF-8 */
87 cnv = g_locale_to_utf8(std_out, -1, NULL, NULL, err);
88 g_free(std_out);
89 return cnv;
92 gboolean
93 music_can_detect(GError **err) {
94 return music_command_can_detect(err);
97 char*
98 music_detect(GError **err) {
99 if (conf.music_command)
100 return music_command_detect(conf.music_command, err);
101 return NULL;