From 7968fa377923c305d381185e984cac7018a4e025 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 16 Aug 2012 00:20:02 +0200 Subject: ProxyDatabase: implement GetSong() --- src/db/ProxyDatabasePlugin.cxx | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/db/ProxyDatabasePlugin.cxx') diff --git a/src/db/ProxyDatabasePlugin.cxx b/src/db/ProxyDatabasePlugin.cxx index 5604daf10..d36cebcfd 100644 --- a/src/db/ProxyDatabasePlugin.cxx +++ b/src/db/ProxyDatabasePlugin.cxx @@ -183,15 +183,38 @@ ProxyDatabase::Close() mpd_connection_free(connection); } +static song * +Convert(const struct mpd_song *song); + struct song * ProxyDatabase::GetSong(const char *uri, GError **error_r) const { // TODO: implement // TODO: auto-reconnect - g_set_error(error_r, db_quark(), DB_NOT_FOUND, - "No such song: %s", uri); - return nullptr; + if (!mpd_send_list_meta(connection, uri)) { + CheckError(connection, error_r); + return nullptr; + } + + struct mpd_song *song = mpd_recv_song(connection); + struct song *song2 = song != nullptr + ? Convert(song) + : nullptr; + mpd_song_free(song); + if (!mpd_response_finish(connection)) { + if (song2 != nullptr) + song_free(song2); + + CheckError(connection, error_r); + return nullptr; + } + + if (song2 == nullptr) + g_set_error(error_r, db_quark(), DB_NOT_FOUND, + "No such song: %s", uri); + + return song2; } void -- cgit v1.2.3