Only print playing song

This commit is contained in:
zvon 2020-05-29 20:45:39 +02:00
parent 53a2e60d87
commit b0450da800
5 changed files with 39 additions and 11 deletions

View File

@ -196,7 +196,7 @@ void dbusStop( DBusConnection *conn, const char *player ) {
dbus_message_unref( msg );
}
bool dbusStatus( DBusConnection *conn, const char *player ) {
char *dbusStatus( DBusConnection *conn, const char *player ) {
DBusMessageIter args;
DBusMessageIter string;
DBusMessage *msg = NULL;
@ -208,9 +208,23 @@ bool dbusStatus( DBusConnection *conn, const char *player ) {
char *meta = NULL;
dbus_message_iter_recurse( &args, &string );
dbus_message_iter_get_basic( &string, &meta );
bool ret = strcmp( meta, "Playing" ) == 0;
ret |= strcmp( meta, "Paused" ) == 0;
char *ret = strdup( meta );
// free reply
dbus_message_unref( msg );
return ret;
}
bool dbusRunning( DBusConnection *conn, const char *player ) {
char *status = dbusStatus( conn, player );
bool ret = strcmp( status, "Playing" ) == 0;
ret |= strcmp( status, "Paused" ) == 0;
free( status );
return ret;
}
bool dbusPlaying( DBusConnection *conn, const char *player ) {
char *status = dbusStatus( conn, player );
bool ret = strcmp( status, "Playing" ) == 0;
free( status );
return ret;
}

View File

@ -13,6 +13,7 @@ void dbusPlayPause( DBusConnection *conn, const char *player );
void dbusNext( DBusConnection *conn, const char *player );
void dbusPrev( DBusConnection *conn, const char *player );
void dbusStop( DBusConnection *conn, const char *player );
bool dbusStatus( DBusConnection *conn, const char *player );
bool dbusRunning( DBusConnection *conn, const char *player );
bool dbusPlaying( DBusConnection *conn, const char *player );
#endif

8
main.c
View File

@ -60,7 +60,7 @@ int main( int argc, char **argv ) {
if ( requests & SONG_FLAG || requests & META_FLAG ) {
struct song_metadata song = { 0 };
if ( sources & MPD_FLAG ) {
if ( sources & MPD_FLAG && mpdPlaying( mpd_connection ) ) {
song = mpdGetSong( mpd_connection );
if ( requests & SONG_FLAG )
printSong( &song );
@ -70,6 +70,8 @@ int main( int argc, char **argv ) {
if ( sources & DBUS_FLAG ) {
for ( char **player = dbus_players; *player; ++player ) {
if( !dbusPlaying( dbus_connection, *player ) )
continue;
song = dbusGetSong( dbus_connection, *player );
if ( requests & SONG_FLAG )
printSong( &song );
@ -81,11 +83,11 @@ int main( int argc, char **argv ) {
if( requests & RUNNING_FLAG ) {
ret = EXIT_FAILURE;
if( sources & MPD_FLAG && mpdStatus( mpd_connection ) )
if( sources & MPD_FLAG && mpdRunning( mpd_connection ) )
ret = EXIT_SUCCESS;
if( sources & DBUS_FLAG ) {
for( char **player = dbus_players; *player; ++player ) {
if( dbusStatus( dbus_connection, *player ) )
if( dbusRunning( dbus_connection, *player ) )
ret = EXIT_SUCCESS;
}
}

View File

@ -65,11 +65,21 @@ void mpdStop( struct mpd_connection *mpd_connection ) {
mpd_send_stop( mpd_connection );
}
bool mpdStatus( struct mpd_connection *mpd_connection ) {
enum mpd_state mpdStatus( struct mpd_connection *mpd_connection ) {
struct mpd_status *status = mpd_run_status( mpd_connection );
if( status == NULL )
return false;
return -1;
enum mpd_state ret = mpd_status_get_state( status );
mpd_status_free( status );
return ret != MPD_STATE_STOP && ret != MPD_STATE_UNKNOWN;
return ret;
}
bool mpdRunning( struct mpd_connection *mpd_connection ) {
enum mpd_state state = mpdStatus( mpd_connection );
return state != MPD_STATE_STOP && state != MPD_STATE_UNKNOWN;
}
bool mpdPlaying( struct mpd_connection *mpd_connection ) {
enum mpd_state state = mpdStatus( mpd_connection );
return state == MPD_STATE_PLAY;
}

View File

@ -10,4 +10,5 @@ void mpdPlayPause( struct mpd_connection *mpd_connection );
void mpdNext( struct mpd_connection *mpd_connection );
void mpdPrev( struct mpd_connection *mpd_connection );
void mpdStop( struct mpd_connection *mpd_connection );
bool mpdStatus( struct mpd_connection *mpd_connection );
bool mpdRunning( struct mpd_connection *mpd_connection );
bool mpdPlaying( struct mpd_connection *mpd_connection );