2020-05-29 12:21:05 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include "metadata.h"
|
|
|
|
#include "dbus_client.h"
|
|
|
|
#include "mpd_client.h"
|
|
|
|
|
2020-05-29 18:27:46 +00:00
|
|
|
#define SONG_FLAG 0x0001
|
|
|
|
#define META_FLAG 0x0002
|
|
|
|
#define RUNNING_FLAG 0x0004
|
|
|
|
|
|
|
|
#define MPD_FLAG 0x0001
|
|
|
|
#define DBUS_FLAG 0x0002
|
|
|
|
|
|
|
|
void parseCommandLine( int argc, char **argv, size_t *requests,
|
|
|
|
size_t *sources ) {
|
|
|
|
for ( int i = 1; i < argc; i++ ) {
|
|
|
|
if ( !strcmp( argv[i], "song" ) )
|
|
|
|
*requests |= SONG_FLAG;
|
|
|
|
else if ( !strcmp( argv[i], "info" ) )
|
|
|
|
*requests |= META_FLAG;
|
|
|
|
else if ( !strcmp( argv[i], "status" ) )
|
|
|
|
*requests |= RUNNING_FLAG;
|
|
|
|
else if ( !strcmp( argv[i], "mpd" ) )
|
|
|
|
*sources |= MPD_FLAG;
|
|
|
|
else if ( !strcmp( argv[i], "dbus" ) )
|
|
|
|
*sources |= DBUS_FLAG;
|
2020-05-29 12:21:05 +00:00
|
|
|
}
|
|
|
|
|
2020-05-29 18:27:46 +00:00
|
|
|
if ( *sources == 0 )
|
|
|
|
*sources = MPD_FLAG | DBUS_FLAG;
|
|
|
|
}
|
|
|
|
|
|
|
|
int main( int argc, char **argv ) {
|
|
|
|
size_t requests = 0, sources = 0;
|
|
|
|
int ret = EXIT_SUCCESS;
|
|
|
|
parseCommandLine( argc, argv, &requests, &sources );
|
|
|
|
|
|
|
|
DBusConnection *dbus_connection = NULL;
|
|
|
|
char **dbus_players = NULL;
|
|
|
|
struct mpd_connection *mpd_connection = NULL;
|
|
|
|
|
|
|
|
if ( sources & MPD_FLAG )
|
|
|
|
mpd_connection = mpdConnect( 6600 );
|
|
|
|
if ( sources & DBUS_FLAG ) {
|
|
|
|
dbus_connection = dbusConnect();
|
|
|
|
dbus_players = dbusGetMediaPlayers( dbus_connection );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( requests & SONG_FLAG || requests & META_FLAG ) {
|
|
|
|
struct song_metadata song = { 0 };
|
|
|
|
if ( sources & MPD_FLAG ) {
|
|
|
|
song = mpdGetSong( mpd_connection );
|
|
|
|
if ( requests & SONG_FLAG )
|
|
|
|
printSong( &song );
|
|
|
|
if ( requests & META_FLAG )
|
|
|
|
printMeta( &song );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( sources & DBUS_FLAG ) {
|
|
|
|
for ( char **player = dbus_players; *player; ++player ) {
|
|
|
|
song = dbusGetSong( dbus_connection, *player );
|
|
|
|
if ( requests & SONG_FLAG )
|
|
|
|
printSong( &song );
|
|
|
|
if ( requests & META_FLAG )
|
|
|
|
printMeta( &song );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-05-29 12:21:05 +00:00
|
|
|
|
2020-05-29 18:27:46 +00:00
|
|
|
if( requests & RUNNING_FLAG ) {
|
|
|
|
ret = EXIT_FAILURE;
|
|
|
|
if( sources & MPD_FLAG && mpdStatus( mpd_connection ) )
|
|
|
|
ret = EXIT_SUCCESS;
|
|
|
|
if( sources & DBUS_FLAG ) {
|
|
|
|
for( char **player = dbus_players; *player; ++player ) {
|
|
|
|
if( dbusStatus( dbus_connection, *player ) )
|
|
|
|
ret = EXIT_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
2020-05-29 12:21:05 +00:00
|
|
|
}
|
|
|
|
|
2020-05-29 18:27:46 +00:00
|
|
|
free( dbus_players );
|
|
|
|
dbusDisconnect( dbus_connection );
|
2020-05-29 12:21:05 +00:00
|
|
|
mpdDisconnect( mpd_connection );
|
|
|
|
|
2020-05-29 18:27:46 +00:00
|
|
|
return ret;
|
2020-05-29 12:21:05 +00:00
|
|
|
}
|