From c33eade8bacb1c5506824443089206474303dab8 Mon Sep 17 00:00:00 2001 From: Ron Pedde Date: Sat, 19 Feb 2005 00:50:29 +0000 Subject: [PATCH] Add getPlaylistItems rpc function --- src/xml-rpc.c | 59 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/src/xml-rpc.c b/src/xml-rpc.c index dcd347c9..2c1d445c 100644 --- a/src/xml-rpc.c +++ b/src/xml-rpc.c @@ -9,11 +9,12 @@ #include "err.h" #include "db-memory.h" +#include "mp3-scanner.h" #include "webserver.h" /* Forwards */ void xml_get_playlists(WS_CONNINFO *pwsc); -void xml_get_playlistinfo(WS_CONNINFO *pwsc); +void xml_get_playlistitems(WS_CONNINFO *pwsc); char *xml_entity_encode(char *original); /** @@ -32,8 +33,9 @@ void xml_handle(WS_CONNINFO *pwsc) { if(strcasecmp(method,"getPlaylists") == 0) { xml_get_playlists(pwsc); return; - } else if(strcasecmp(method,"getPlaylistInfo") == 0) { - xml_get_playlistinfo(pwsc); + } else if(strcasecmp(method,"getPlaylistItems") == 0) { + xml_get_playlistitems(pwsc); + return; } ws_returnerror(pwsc,500,"Invalid method"); @@ -48,23 +50,25 @@ void xml_get_playlists(WS_CONNINFO *pwsc) { int playlistid; char *temp; - ws_addresponseheader(pwsc,"Content-type","text/xml"); + ws_addresponseheader(pwsc,"Content-Type","text/xml; charset=utf-8"); ws_writefd(pwsc,"HTTP/1.0 200 OK\r\n"); ws_emitheaders(pwsc); - ws_writefd(pwsc,"\n"); - ws_writefd(pwsc,"\n"); + ws_writefd(pwsc,""); + ws_writefd(pwsc,""); /* enumerate all the playlists */ henum=db_playlist_enum_begin(); while(henum) { playlistid=db_playlist_enum(&henum); - ws_writefd(pwsc," \n"); - ws_writefd(pwsc," %d\n",playlistid); + ws_writefd(pwsc,""); + ws_writefd(pwsc,"%d",playlistid); temp=xml_entity_encode(db_get_playlist_name(playlistid)); - ws_writefd(pwsc," %s\n",temp); + ws_writefd(pwsc,"%s",temp); if(temp) free(temp); - ws_writefd(pwsc," \n"); + ws_writefd(pwsc,"%d",db_get_playlist_is_smart(playlistid)); + ws_writefd(pwsc,"%d",db_get_playlist_entry_count(playlistid)); + ws_writefd(pwsc," "); } ws_writefd(pwsc,"\n"); @@ -76,9 +80,42 @@ void xml_get_playlists(WS_CONNINFO *pwsc) { /** * return xml file of playlist info */ -void xml_get_playlistinfo(WS_CONNINFO *pwsc) { +void xml_get_playlistitems(WS_CONNINFO *pwsc) { + char *playlistnum; + int playlistid; + ENUMHANDLE henum; + unsigned long int itemid; + char *temp; + MP3FILE *current; + + if((playlistnum=ws_getvar(pwsc,"playlistid")) == NULL) { + ws_returnerror(pwsc,500,"no playlistid specified"); + return; + } + + ws_addresponseheader(pwsc,"Content-Type","text/xml; charset=utf-8"); ws_writefd(pwsc,"HTTP/1.0 200 OK\r\n"); ws_emitheaders(pwsc); + + playlistid=atoi(playlistnum); + + ws_writefd(pwsc,""); + + henum=db_playlist_items_enum_begin(playlistid); + while((itemid=db_playlist_items_enum(&henum)) != -1) { + current=db_find(itemid); + if(0 != current) { + ws_writefd(pwsc,"%lu",itemid); + temp=xml_entity_encode(current->title); + ws_writefd(pwsc,"%s",temp); + free(temp); + db_dispose(current); + free(current); + } + } + + ws_writefd(pwsc,""); + return; } /**