From 711a4497dbc85cd50e77f01c0763de1cb57e47de Mon Sep 17 00:00:00 2001 Message-Id: <711a4497dbc85cd50e77f01c0763de1cb57e47de.1715530693.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sat, 5 Jun 2010 15:40:10 +0100 Subject: [PATCH] length command stub Organization: Straylight/Edgeware From: Richard Kettlewell --- lib/client-stubs.c | 11 +++++++++ lib/client-stubs.h | 10 +++++++++ lib/client.c | 19 ---------------- scripts/protocol | 56 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 76 insertions(+), 20 deletions(-) diff --git a/lib/client-stubs.c b/lib/client-stubs.c index 3d02139..9d8edf7 100644 --- a/lib/client-stubs.c +++ b/lib/client-stubs.c @@ -94,6 +94,17 @@ int disorder_get_global(disorder_client *c, const char *pref, char **valuep) { return dequote(disorder_simple(c, valuep, "get-global", pref, (char *)0), valuep); } +int disorder_length(disorder_client *c, const char *track, long *lengthp) { + char *v; + int rc; + + if((rc = disorder_simple(c, &v, "length", track, (char *)0))) + return rc; + *lengthp = atol(v); + xfree(v); + return 0; +} + int disorder_make_cookie(disorder_client *c, char **cookiep) { return dequote(disorder_simple(c, cookiep, "make-cookie", (char *)0), cookiep); } diff --git a/lib/client-stubs.h b/lib/client-stubs.h index 13f0724..f7a9dbb 100644 --- a/lib/client-stubs.h +++ b/lib/client-stubs.h @@ -166,6 +166,16 @@ int disorder_get(disorder_client *c, const char *track, const char *pref, char * */ int disorder_get_global(disorder_client *c, const char *pref, char **valuep); +/** @brief Get a track's length + * + * If the track does not exist an error is returned. + * + * @param track Track name + * @param lengthp Track length in seconds + * @return 0 on success, non-0 on error + */ +int disorder_length(disorder_client *c, const char *track, long *lengthp); + /** @brief Create a login cookie for this user * * The cookie may be redeemed via the 'cookie' command diff --git a/lib/client.c b/lib/client.c index 1cb73a4..e7a1acc 100644 --- a/lib/client.c +++ b/lib/client.c @@ -742,25 +742,6 @@ static int boolean(const char *cmd, const char *value, return 0; } -/** @brief Get the length of a track - * @param c Client - * @param track Track name (UTF-8) - * @param valuep Where to store length in seconds - * @return 0 on success, non-0 on error - * - * If the length is unknown 0 is returned. - */ -int disorder_length(disorder_client *c, const char *track, - long *valuep) { - char *value; - int rc; - - if((rc = disorder_simple(c, &value, "length", track, (char *)0))) - return rc; - *valuep = atol(value); - return 0; -} - /** @brief Set volume * @param c Client * @param left New left channel value diff --git a/scripts/protocol b/scripts/protocol index 2cfa644..b623632 100755 --- a/scripts/protocol +++ b/scripts/protocol @@ -211,6 +211,56 @@ sub boolean { # TODO } +# integer(CMD, SUMMARY, DETAIL, [[NAME,DESCR], [NAME,DESCR], ...], [RETURN, DESCR]) +# +# Response is an integer, or failure +sub integer { + my $cmd = shift; + my $summary = shift; + my $detail = shift; + my $args = shift; + my $return = shift; + + my $cmdc = $cmd; + $cmdc =~ s/-/_/g; + # Synchronous C API + push(@h, "/** \@brief $summary\n", + " *\n", + " * $detail\n", + " *\n", + map(" * \@param $_->[0] $_->[1]\n", @$args), + " * \@param $return->[0]p $return->[1]\n", + " * \@return 0 on success, non-0 on error\n", + " */\n", + "int disorder_$cmdc(disorder_client *c", + map(", const char *$_->[0]", @$args), + ", long *$return->[0]p);\n", + "\n"); + push(@c, "int disorder_$cmdc(disorder_client *c", + map(", const char *$_->[0]", @$args), + ", long *$return->[0]p) {\n", + " char *v;\n", + " int rc;\n", + "\n", + " if((rc = disorder_simple(c, &v, \"$cmd\"", + map(", $_->[0]", @$args), + ", (char *)0)))\n", + " return rc;\n", + " *$return->[0]p = atol(v);\n", + " xfree(v);\n", + " return 0;\n", + "}\n\n"); + + # Asynchronous C API + # TODO + + # Python API + # TODO + + # Java API + # TODO +} + # list(CMD, SUMMARY, DETAIL, [[NAME,DESCR], [NAME,DESCR], ...], [RETURN, DESCR]) # # Response is a a list of strings in a dot-stuffed body @@ -378,7 +428,11 @@ string("get-global", [["pref", "Global preference name"]], ["value", "Preference value"]); -# TODO length +integer("length", + "Get a track's length", + "If the track does not exist an error is returned.", + [["track", "Track name"]], + ["length", "Track length in seconds"]); # TODO log -- [mdw]