initial commit
This commit is contained in:
commit
dcdc795b2a
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
config.mk
|
||||
mpdart
|
BIN
.mpdart.c.swp
Normal file
BIN
.mpdart.c.swp
Normal file
Binary file not shown.
11
Makefile
Normal file
11
Makefile
Normal file
|
@ -0,0 +1,11 @@
|
|||
.POSIX:
|
||||
include config.mk
|
||||
all: mpdart config.mk
|
||||
mpdart: mpdart.c
|
||||
$(CC) $(CONFIG) $(CFLAGS) $(CXXFLAGS) -o $@ mpdart.c
|
||||
clean:
|
||||
rm -f mpdart
|
||||
install: mpdart
|
||||
install -Dm755 mpdart $(DESTDIR)$(PREFIX)/bin/mpdart
|
||||
uninstall:
|
||||
rm -f $(DESTDIR)$(PREFIX)/bin/mpdart
|
7
configure.sh
Executable file
7
configure.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
if command -V pkg-config >/dev/null 2>&1; then
|
||||
printf '%s\n' "CONFIG=$(pkg-config libmpdclient --libs --cflags)" > config.mk
|
||||
else
|
||||
printf '%s\n' "CONFIG=-lmpdclient" > config.mk
|
||||
fi
|
95
mpdart.c
Normal file
95
mpdart.c
Normal file
|
@ -0,0 +1,95 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <mpd/client.h>
|
||||
|
||||
char* mpd_host = 0;
|
||||
unsigned mpd_port = 0;
|
||||
unsigned mpd_timeout = 0;
|
||||
struct mpd_connection* connection = 0;
|
||||
|
||||
char* mpd_db_dir = 0;
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
/* parse args */
|
||||
while (*++argv) {
|
||||
if (!strcmp(*argv, "-d"))
|
||||
mpd_db_dir = *++argv;
|
||||
else if (!strcmp(*argv, "-h"))
|
||||
mpd_host = *++argv;
|
||||
else if (!strcmp(*argv, "-p") && argv[1])
|
||||
mpd_port = atoi(*++argv);
|
||||
else if (!strcmp(*argv, "-t") && argv[1])
|
||||
mpd_timeout = atoi(*++argv);
|
||||
}
|
||||
|
||||
if (!mpd_db_dir) {
|
||||
fprintf(stderr, "Please specify mpd music directory with -d\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
/* strip all '/'es from the end of it */
|
||||
{
|
||||
int i = 0;
|
||||
for (; mpd_db_dir[i]; i++);
|
||||
while (mpd_db_dir[--i] == '/');
|
||||
mpd_db_dir[i+1] = '\0';
|
||||
}
|
||||
|
||||
connection = mpd_connection_new(mpd_host, mpd_port, mpd_timeout);
|
||||
|
||||
if (!connection) {
|
||||
fprintf(stderr, "Unable to allocate memory for mpd_connection struct\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) {
|
||||
fprintf(stderr, "%s\n", mpd_connection_get_error_message(connection));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
const int* version = mpd_connection_get_server_version(connection);
|
||||
printf("Connected to mpd server version %d.%d.%d\n", version[0], version[1], version[2]);
|
||||
|
||||
int song_id;
|
||||
int old_song_id = -1;
|
||||
|
||||
while (1) {
|
||||
|
||||
struct mpd_song* song;
|
||||
|
||||
mpd_send_current_song(connection);
|
||||
song = mpd_recv_song(connection);
|
||||
|
||||
if (!song) {
|
||||
fprintf(stderr, "failed to get mpd song\n");
|
||||
/* TODO clear image */
|
||||
goto wait;
|
||||
}
|
||||
|
||||
song_id = mpd_song_get_id(song);
|
||||
|
||||
if (song_id != old_song_id) {
|
||||
/* TODO render image */
|
||||
printf("Now playing: '%s' by '%s' from '%s/%s'\n",
|
||||
mpd_song_get_tag(song, MPD_TAG_TITLE, 0),
|
||||
mpd_song_get_tag(song, MPD_TAG_ARTIST, 0),
|
||||
mpd_db_dir, mpd_song_get_uri(song));
|
||||
}
|
||||
|
||||
old_song_id = song_id;
|
||||
|
||||
mpd_song_free(song);
|
||||
|
||||
wait:
|
||||
mpd_send_idle_mask(connection, MPD_IDLE_PLAYER);
|
||||
while (!mpd_recv_idle(connection, 1))
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user