From 304639c9a6cebe8fa34e6bc2bbf64bc1ce3ec8d1 Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Wed, 9 Jun 2004 01:30:51 +0000 Subject: implmented ID functions, need to implemented id commands git-svn-id: https://svn.musicpd.org/mpd/trunk@1407 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/playlist.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/playlist.c b/src/playlist.c index 1f7c876ed..e7eb1827d 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -463,6 +463,32 @@ int playlistInfo(FILE * fp, int song) { return 0; } +# define checkSongId(id) { \ + if(id < 0 || id >= PLAYLIST_HASH_MULT*playlist_max_length || \ + playlist.idToNum[id] == -1 ) \ + { \ + commandError(fp, ACK_ERROR_NO_EXIST, \ + "song id doesn't exist: \"%i\"", id); \ + return -1; \ + } \ +} + +int playlistId(FILE * fp, int id) { + int i; + int begin = 0; + int end = playlist.length; + + if(id>=0) { + checkSongId(id); + begin = playlist.idToNum[id]; + end = begin+1; + } + + for(i=begin; i=0) { @@ -673,6 +698,14 @@ int swapSongsInPlaylist(FILE * fp, int song1, int song2) { return 0; } +int swapSongsInPlaylistById(FILE * fp, int id1, int id2) { + checkSongId(id1); + checkSongId(id2); + + return swapSongsInPlaylist(fp, playlist.idToNum[id1], + playlist.idToNum[id2]); +} + #define moveSongFromTo(from, to) { \ playlist.idToNum[playlist.numToId[from]] = to; \ playlist.numToId[to] = playlist.numToId[from]; \ @@ -748,6 +781,12 @@ int deleteFromPlaylist(FILE * fp, int song) { return 0; } +int deleteFromPlaylistById(FILE * fp, int id) { + checkSongId(id); + + return deleteFromPlaylist(fp, playlist.idToNum[id]); +} + void deleteASongFromPlaylist(Song * song) { int i; @@ -839,6 +878,16 @@ int playPlaylist(FILE * fp, int song, int stopOnError) { return playPlaylistOrderNumber(fp,i); } +int playPlaylistById(FILE * fp, int id, int stopOnError) { + if(id == -1) { + return playPlaylist(fp, id, stopOnError); + } + + checkSongId(id); + + return playPlaylist(fp, playlist.idToNum[id], stopOnError); +} + void syncCurrentPlayerDecodeMetadata() { Song * songPlayer = playerCurrentDecodeSong(); Song * song; @@ -1032,6 +1081,14 @@ int moveSongInPlaylist(FILE * fp, int from, int to) { return 0; } +int moveSongInPlaylistById(FILE * fp, int id1, int id2) { + checkSongId(id1); + checkSongId(id2); + + return moveSongInPlaylist(fp, playlist.idToNum[id1], + playlist.idToNum[id2]); +} + void orderPlaylist() { int i; @@ -1398,3 +1455,9 @@ int seekSongInPlaylist(FILE * fp, int song, float time) { return playerSeek(fp, playlist.songs[playlist.order[i]], time); } + +int seekSongInPlaylistById(FILE * fp, int id, float time) { + checkSongId(id); + + return seekSongInPlaylist(fp, playlist.idToNum[id], time); +} -- cgit v1.2.3