From e68aa6f457b5b0e456dcd083e8e162ef31e2204a Mon Sep 17 00:00:00 2001 From: zvon Date: Fri, 29 May 2020 21:59:14 +0200 Subject: [PATCH] Add duration and position to meatadata --- dbus_client.c | 12 ++++++++++++ metadata.c | 2 ++ metadata.h | 4 ++++ mpd_client.c | 8 ++++++++ mpd_client.h | 1 + 5 files changed, 27 insertions(+) diff --git a/dbus_client.c b/dbus_client.c index c54645c..e0e4fac 100644 --- a/dbus_client.c +++ b/dbus_client.c @@ -158,10 +158,22 @@ struct song_metadata dbusGetSong( DBusConnection *conn, const char *player ) { ret.file = strdup( meta_val ); else if ( !strcmp( meta_name, "mpris:artUrl" ) ) ret.art_uri = strdup( meta_val ); + } else if ( dbus_message_iter_get_arg_type( &variant ) == + DBUS_TYPE_INT64 ) { + if ( !strcmp( meta_name, "mpris:length" ) ) { + dbus_message_iter_get_basic( &variant, &ret.duration ); + } } } while ( dbus_message_iter_next( &dict ) ); dbus_message_unref( msg ); + + const char *params2[3] = { "org.mpris.MediaPlayer2.Player", "Position", + NULL }; + dbusQuery( &args, &msg, conn, player, "/org/mpris/MediaPlayer2", + "org.freedesktop.DBus.Properties", "Get", params2 ); + dbus_message_iter_recurse( &args, &variant ); + dbus_message_iter_get_basic( &variant, &ret.position ); return ret; } diff --git a/metadata.c b/metadata.c index 541d845..81853c3 100644 --- a/metadata.c +++ b/metadata.c @@ -21,6 +21,8 @@ void printMeta( struct song_metadata *song ) { if ( song->art_uri != NULL ) { printf( "ART: %s\n", song->art_uri ); } + printf( "DURATION: %zu\n", song->duration ); + printf( "POSITION: %zu\n", song->position ); } void freeSong( struct song_metadata *song ) { diff --git a/metadata.h b/metadata.h index 53291ca..b1c9622 100644 --- a/metadata.h +++ b/metadata.h @@ -1,6 +1,8 @@ #ifndef METADATA_H #define METADATA_H +#include + struct song_metadata { const char *title; const char *artist; @@ -8,6 +10,8 @@ struct song_metadata { const char *year; const char *file; const char *art_uri; + size_t duration; + size_t position; }; void printSong( struct song_metadata *song ); diff --git a/mpd_client.c b/mpd_client.c index 172080b..cb9f5b6 100644 --- a/mpd_client.c +++ b/mpd_client.c @@ -43,6 +43,14 @@ struct song_metadata mpdGetSong( struct mpd_connection *mpd_connection ) { ret.year = strdup( copy ); ret.file = strdup( mpd_song_get_uri( song ) ); + + struct mpd_status *status = mpd_run_status( mpd_connection ); + if ( status == NULL ) + goto endfree; + ret.duration = mpd_status_get_total_time( status ); + ret.position = mpd_status_get_elapsed_time( status ); + + mpd_status_free( status ); endfree: mpd_song_free( song ); end: diff --git a/mpd_client.h b/mpd_client.h index b13db26..a98ac75 100644 --- a/mpd_client.h +++ b/mpd_client.h @@ -1,5 +1,6 @@ #include #include +#include #include "metadata.h"