Adding functions for clearing/adding to stored playlists. Commands to make
use of these functions are still being worked on. git-svn-id: https://svn.musicpd.org/mpd/trunk@5075 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
6d6155d766
commit
08003904d7
|
@ -304,11 +304,22 @@ static int directoryAddSongToPlaylist(int fd, Song * song, void *data)
|
|||
return addSongToPlaylist(fd, song, 0);
|
||||
}
|
||||
|
||||
static int directoryAddSongToStoredPlaylist(int fd, Song *song, void *data)
|
||||
{
|
||||
return addSongToStoredPlaylist(fd, song, (char *)data);
|
||||
}
|
||||
|
||||
int addAllIn(int fd, char *name)
|
||||
{
|
||||
return traverseAllIn(fd, name, directoryAddSongToPlaylist, NULL, NULL);
|
||||
}
|
||||
|
||||
int addAllInToStoredPlaylist(int fd, char *name, char *utf8file)
|
||||
{
|
||||
return traverseAllIn(fd, name, directoryAddSongToStoredPlaylist, NULL,
|
||||
(void *)utf8file);
|
||||
}
|
||||
|
||||
static int directoryPrintSongInfo(int fd, Song * song, void *data)
|
||||
{
|
||||
return printSongInfo(fd, song);
|
||||
|
|
|
@ -47,6 +47,8 @@ int printAllIn(int fd, char *name);
|
|||
|
||||
int addAllIn(int fd, char *name);
|
||||
|
||||
int addAllInToStoredPlaylist(int fd, char *name, char *utf8file);
|
||||
|
||||
int printInfoForAllIn(int fd, char *name);
|
||||
|
||||
int searchForSongsIn(int fd, char *name, int numItems,
|
||||
|
|
102
src/playlist.c
102
src/playlist.c
|
@ -236,6 +236,44 @@ int clearPlaylist(int fd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int clearStoredPlaylist(int fd, char *utf8file)
|
||||
{
|
||||
int fileD;
|
||||
char *file;
|
||||
char *rfile;
|
||||
char *actualFile;
|
||||
|
||||
if (strstr(utf8file, "/")) {
|
||||
commandError(fd, ACK_ERROR_ARG,
|
||||
"cannot clear \"%s\", saving playlists to "
|
||||
"subdirectories is not supported", utf8file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
file = utf8ToFsCharset(utf8file);
|
||||
|
||||
rfile = xmalloc(strlen(file) + strlen(".") +
|
||||
strlen(PLAYLIST_FILE_SUFFIX) + 1);
|
||||
|
||||
strcpy(rfile, file);
|
||||
strcat(rfile, ".");
|
||||
strcat(rfile, PLAYLIST_FILE_SUFFIX);
|
||||
|
||||
actualFile = rpp2app(rfile);
|
||||
|
||||
free(rfile);
|
||||
|
||||
while ((fileD = open(actualFile, O_WRONLY | O_TRUNC | O_CREAT)) == -1
|
||||
&& errno == EINTR);
|
||||
if (fileD == -1) {
|
||||
commandError(fd, ACK_ERROR_SYSTEM, "problems opening file");
|
||||
return -1;
|
||||
}
|
||||
while (close(fileD) == -1 && errno == EINTR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int showPlaylist(int fd)
|
||||
{
|
||||
int i;
|
||||
|
@ -590,6 +628,24 @@ int addToPlaylist(int fd, char *url, int printId)
|
|||
return addSongToPlaylist(fd, song, printId);
|
||||
}
|
||||
|
||||
int addToStoredPlaylist(int fd, char *url, char *utf8file)
|
||||
{
|
||||
Song *song;
|
||||
|
||||
DEBUG("add to stored playlist: %s\n", url);
|
||||
|
||||
if ((song = getSongFromDB(url))) {
|
||||
} else if (!(isValidRemoteUtf8Url(url) &&
|
||||
(song = newSong(url, SONG_TYPE_URL, NULL)))) {
|
||||
commandError(fd, ACK_ERROR_NO_EXIST,
|
||||
"\"%s\" is not in the music db or is "
|
||||
"not a valid url", url);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return addSongToStoredPlaylist(fd, song, utf8file);
|
||||
}
|
||||
|
||||
int addSongToPlaylist(int fd, Song * song, int printId)
|
||||
{
|
||||
int id;
|
||||
|
@ -642,6 +698,52 @@ int addSongToPlaylist(int fd, Song * song, int printId)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int addSongToStoredPlaylist(int fd, Song *song, char *utf8file)
|
||||
{
|
||||
FILE *fileP;
|
||||
char *file;
|
||||
char *rfile;
|
||||
char *actualFile;
|
||||
char *url;
|
||||
|
||||
if (strstr(utf8file, "/")) {
|
||||
commandError(fd, ACK_ERROR_ARG,
|
||||
"cannot add to \"%s\", saving playlists to "
|
||||
"subdirectories is not supported", utf8file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
file = utf8ToFsCharset(utf8file);
|
||||
|
||||
rfile = xmalloc(strlen(file) + strlen(".") +
|
||||
strlen(PLAYLIST_FILE_SUFFIX) + 1);
|
||||
|
||||
strcpy(rfile, file);
|
||||
strcat(rfile, ".");
|
||||
strcat(rfile, PLAYLIST_FILE_SUFFIX);
|
||||
|
||||
actualFile = rpp2app(rfile);
|
||||
|
||||
free(rfile);
|
||||
|
||||
while (!(fileP = fopen(actualFile, "a")) && errno == EINTR);
|
||||
if (fileP == NULL) {
|
||||
commandError(fd, ACK_ERROR_SYSTEM, "problems opening file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
url = utf8ToFsCharset(getSongUrl(song));
|
||||
|
||||
if (playlist_saveAbsolutePaths && song->type == SONG_TYPE_FILE)
|
||||
fprintf(fileP, "%s\n", rmp2amp(url));
|
||||
else
|
||||
fprintf(fileP, "%s\n", url);
|
||||
|
||||
while (fclose(fileP) && errno == EINTR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int swapSongsInPlaylist(int fd, int song1, int song2)
|
||||
{
|
||||
int queuedSong = -1;
|
||||
|
|
|
@ -40,10 +40,16 @@ void savePlaylistState(FILE *);
|
|||
|
||||
int clearPlaylist(int fd);
|
||||
|
||||
int clearStoredPlaylist(int fd, char *utf8file);
|
||||
|
||||
int addToPlaylist(int fd, char *file, int printId);
|
||||
|
||||
int addToStoredPlaylist(int fd, char *file, char *utf8file);
|
||||
|
||||
int addSongToPlaylist(int fd, Song * song, int printId);
|
||||
|
||||
int addSongToStoredPlaylist(int fd, Song *song, char *utf8file);
|
||||
|
||||
int showPlaylist(int fd);
|
||||
|
||||
int deleteFromPlaylist(int fd, int song);
|
||||
|
|
Loading…
Reference in New Issue