aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-14 11:10:47 +0200
committerMax Kellermann <max@duempel.org>2008-10-14 11:10:47 +0200
commita52a9fc1fc2b385dd66edd45f602ac337399cc83 (patch)
tree68ffeb4b6a2c689519ea38ca87782f935eb7b29d
parent308bc230b241757088668d65aafcea4575a52e9c (diff)
downloadmpd-a52a9fc1fc2b385dd66edd45f602ac337399cc83.tar.gz
mpd-a52a9fc1fc2b385dd66edd45f602ac337399cc83.tar.xz
mpd-a52a9fc1fc2b385dd66edd45f602ac337399cc83.zip
playlist: moved code to playlist_save.c
playlist_print_song() and playlist_print_uri() handle charset conversion and (optional) music directory prefixing.
-rw-r--r--src/Makefile.am2
-rw-r--r--src/playlist.c15
-rw-r--r--src/playlist_save.c49
-rw-r--r--src/playlist_save.h32
-rw-r--r--src/storedPlaylist.c17
5 files changed, 89 insertions, 26 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 538e8549e..ca6f8f5ab 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -85,6 +85,7 @@ mpd_headers = \
player_control.h \
playerData.h \
playlist.h \
+ playlist_save.h \
replayGain.h \
ringbuf.h \
signal_check.h \
@@ -163,6 +164,7 @@ mpd_SOURCES = \
player_control.c \
playerData.c \
playlist.c \
+ playlist_save.c \
replayGain.c \
ringbuf.c \
sig_handlers.c \
diff --git a/src/playlist.c b/src/playlist.c
index 34a2311aa..65e7d6391 100644
--- a/src/playlist.c
+++ b/src/playlist.c
@@ -17,6 +17,7 @@
*/
#include "playlist.h"
+#include "playlist_save.h"
#include "player_control.h"
#include "command.h"
#include "ls.h"
@@ -1212,18 +1213,8 @@ enum playlist_result savePlaylist(const char *utf8file)
if (fp == NULL)
return PLAYLIST_RESULT_ERRNO;
- for (i = 0; i < playlist.length; i++) {
- char tmp[MPD_PATH_MAX];
-
- song_get_url(playlist.songs[i], path_max_tmp);
- utf8_to_fs_charset(tmp, path_max_tmp);
-
- if (playlist_saveAbsolutePaths &&
- song_is_file(playlist.songs[i]))
- fprintf(fp, "%s\n", rmp2amp_r(tmp, tmp));
- else
- fprintf(fp, "%s\n", tmp);
- }
+ for (i = 0; i < playlist.length; i++)
+ playlist_print_song(fp, playlist.songs[i]);
while (fclose(fp) && errno == EINTR) ;
diff --git a/src/playlist_save.c b/src/playlist_save.c
new file mode 100644
index 000000000..98979e2a2
--- /dev/null
+++ b/src/playlist_save.c
@@ -0,0 +1,49 @@
+/* the Music Player Daemon (MPD)
+ * Copyright (C) 2008 Max Kellermann <max@duempel.org>
+ * This project's homepage is: http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "playlist_save.h"
+#include "playlist.h"
+#include "song.h"
+#include "path.h"
+#include "ls.h"
+
+void
+playlist_print_song(FILE *file, const struct song *song)
+{
+ char tmp1[MPD_PATH_MAX], tmp2[MPD_PATH_MAX];
+
+ song_get_url(song, tmp1);
+ utf8_to_fs_charset(tmp2, tmp1);
+
+ if (playlist_saveAbsolutePaths && song_is_file(song))
+ fprintf(file, "%s\n", rmp2amp_r(tmp2, tmp2));
+ else
+ fprintf(file, "%s\n", tmp2);
+}
+
+void
+playlist_print_uri(FILE *file, const char *uri)
+{
+ char tmp[MPD_PATH_MAX];
+ const char *s;
+
+ s = utf8_to_fs_charset(tmp, uri);
+ if (playlist_saveAbsolutePaths && !isValidRemoteUtf8Url(s))
+ s = rmp2amp_r(tmp, s);
+ fprintf(file, "%s\n", s);
+}
diff --git a/src/playlist_save.h b/src/playlist_save.h
new file mode 100644
index 000000000..f595d6561
--- /dev/null
+++ b/src/playlist_save.h
@@ -0,0 +1,32 @@
+/* the Music Player Daemon (MPD)
+ * Copyright (C) 2008 Max Kellermann <max@duempel.org>
+ * This project's homepage is: http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef PLAYLIST_SAVE_H
+#define PLAYLIST_SAVE_H
+
+#include <stdio.h>
+
+struct song;
+
+void
+playlist_print_song(FILE *fp, const struct song *song);
+
+void
+playlist_print_uri(FILE *fp, const char *uri);
+
+#endif
diff --git a/src/storedPlaylist.c b/src/storedPlaylist.c
index ca74ba8b1..4e20a6de4 100644
--- a/src/storedPlaylist.c
+++ b/src/storedPlaylist.c
@@ -17,6 +17,7 @@
*/
#include "storedPlaylist.h"
+#include "playlist_save.h"
#include "song.h"
#include "path.h"
#include "utils.h"
@@ -64,7 +65,6 @@ writeStoredPlaylistToPath(List *list, const char *utf8path)
{
ListNode *node;
FILE *file;
- char *s;
char path_max_tmp[MPD_PATH_MAX];
assert(utf8path != NULL);
@@ -77,10 +77,7 @@ writeStoredPlaylistToPath(List *list, const char *utf8path)
node = list->firstNode;
while (node != NULL) {
- s = utf8_to_fs_charset(path_max_tmp, (char *)node->data);
- if (playlist_saveAbsolutePaths && !isValidRemoteUtf8Url(s))
- s = rmp2amp_r(path_max_tmp, s);
- fprintf(file, "%s\n", s);
+ playlist_print_uri(file, (const char *)node->data);
node = node->nextNode;
}
@@ -264,10 +261,8 @@ enum playlist_result
appendSongToStoredPlaylistByPath(const char *utf8path, struct song *song)
{
FILE *file;
- char *s;
struct stat st;
char path_max_tmp[MPD_PATH_MAX];
- char path_max_tmp2[MPD_PATH_MAX];
if (!is_valid_playlist_name(utf8path))
return PLAYLIST_RESULT_BAD_NAME;
@@ -293,13 +288,7 @@ appendSongToStoredPlaylistByPath(const char *utf8path, struct song *song)
return PLAYLIST_RESULT_TOO_LARGE;
}
- s = utf8_to_fs_charset(path_max_tmp2,
- song_get_url(song, path_max_tmp));
-
- if (playlist_saveAbsolutePaths && song_is_file(song))
- s = rmp2amp_r(path_max_tmp, s);
-
- fprintf(file, "%s\n", s);
+ playlist_print_song(file, song);
while (fclose(file) != 0 && errno == EINTR);
return PLAYLIST_RESULT_SUCCESS;