From a52a9fc1fc2b385dd66edd45f602ac337399cc83 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 14 Oct 2008 11:10:47 +0200 Subject: [PATCH] playlist: moved code to playlist_save.c playlist_print_song() and playlist_print_uri() handle charset conversion and (optional) music directory prefixing. --- src/Makefile.am | 2 ++ src/playlist.c | 15 +++----------- src/playlist_save.c | 49 ++++++++++++++++++++++++++++++++++++++++++++ src/playlist_save.h | 32 +++++++++++++++++++++++++++++ src/storedPlaylist.c | 17 +++------------ 5 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 src/playlist_save.c create mode 100644 src/playlist_save.h 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 + * 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 + * 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 + +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;