#include #include #include #include #include "metadata.h" #include "dbus_client.h" #include "mpd_client.h" #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; } 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 ); } } } 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; } } } free( dbus_players ); dbusDisconnect( dbus_connection ); mpdDisconnect( mpd_connection ); return ret; }