aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-10-05 18:18:18 -0700
committerEric Wong <normalperson@yhbt.net>2008-10-05 18:25:25 -0700
commitbb1c32af94c42cda454a0ba2a2979626b96b53fd (patch)
tree3813323e9b9cd6450e062b2d2bf5238fc99fcb84
parent36eba830fc097279f568e801b2d2a35a08004717 (diff)
downloadmpd-bb1c32af94c42cda454a0ba2a2979626b96b53fd.tar.gz
mpd-bb1c32af94c42cda454a0ba2a2979626b96b53fd.tar.xz
mpd-bb1c32af94c42cda454a0ba2a2979626b96b53fd.zip
song: stop storing song_type
We already know if a song is a URL or not based on whether it has parentDir defined or not. Hopefully one day in the future we can drop HTTP support from MPD entirely when an HTTP filesystem comes along and we can access streams via open(2).
Diffstat (limited to '')
-rw-r--r--src/directory.c2
-rw-r--r--src/playlist.c16
-rw-r--r--src/song.c17
-rw-r--r--src/song.h14
-rw-r--r--src/storedPlaylist.c2
5 files changed, 22 insertions, 29 deletions
diff --git a/src/directory.c b/src/directory.c
index de4532e75..5dbab5018 100644
--- a/src/directory.c
+++ b/src/directory.c
@@ -604,7 +604,7 @@ static int addToDirectory(Directory * directory, const char *name)
Song *song;
const char *shortname = mpd_basename(name);
- if (!(song = newSong(shortname, SONG_TYPE_FILE, directory)))
+ if (!(song = newSong(shortname, directory)))
return -1;
songvec_add(&directory->songs, song);
LOG("added %s\n", name);
diff --git a/src/playlist.c b/src/playlist.c
index a91553140..6207ca985 100644
--- a/src/playlist.c
+++ b/src/playlist.c
@@ -187,7 +187,7 @@ void finishPlaylist(void)
int i;
for (i = playlist.length; --i >= 0; ) {
- if (playlist.songs[i]->type == SONG_TYPE_URL)
+ if (!song_is_file(playlist.songs[i]))
freeJustSong(playlist.songs[i]);
}
@@ -212,7 +212,7 @@ void clearPlaylist(void)
stopPlaylist();
for (i = playlist.length; --i >= 0 ; ) {
- if (playlist.songs[i]->type == SONG_TYPE_URL)
+ if (!song_is_file(playlist.songs[i]))
freeJustSong(playlist.songs[i]);
playlist.idToPosition[playlist.positionToId[i]] = -1;
playlist.songs[i] = NULL;
@@ -576,7 +576,7 @@ enum playlist_result addToPlaylist(const char *url, int *added_id)
if ((song = getSongFromDB(url))) {
} else if (!(isValidRemoteUtf8Url(url) &&
- (song = newSong(url, SONG_TYPE_URL, NULL)))) {
+ (song = newSong(url, NULL)))) {
return PLAYLIST_RESULT_NO_SUCH_SONG;
}
@@ -595,7 +595,7 @@ int addToStoredPlaylist(const char *url, const char *utf8file)
if (!isValidRemoteUtf8Url(url))
return ACK_ERROR_NO_EXIST;
- if ((song = newSong(url, SONG_TYPE_URL, NULL))) {
+ if ((song = newSong(url, NULL))) {
int ret = appendSongToStoredPlaylistByPath(utf8file, song);
freeJustSong(song);
return ret;
@@ -739,7 +739,7 @@ enum playlist_result deleteFromPlaylist(int song)
}
}
- if (playlist.songs[song]->type == SONG_TYPE_URL)
+ if (!song_is_file(playlist.songs[song]))
freeJustSong(playlist.songs[song]);
playlist.idToPosition[playlist.positionToId[song]] = -1;
@@ -920,7 +920,7 @@ struct mpd_tag *playlist_current_tag(void)
Song *song = song_at(playlist.current);
/* Non-file song tags can get swept out from under us */
- return (song && song->type == SONG_TYPE_FILE) ? song->tag : NULL;
+ return (song && song_is_file(song)) ? song->tag : NULL;
}
/* This receives dynamic metadata updates from streams */
@@ -932,7 +932,7 @@ static void sync_metadata(void)
if (!(tag = metadata_pipe_current()))
return;
song = song_at(playlist.current);
- if (!song || song->type != SONG_TYPE_URL || tag_equal(song->tag, tag)) {
+ if (!song || song_is_file(song) || tag_equal(song->tag, tag)) {
tag_free(tag);
return;
}
@@ -1266,7 +1266,7 @@ enum playlist_result savePlaylist(const char *utf8file)
utf8_to_fs_charset(tmp, path_max_tmp);
if (playlist_saveAbsolutePaths &&
- playlist.songs[i]->type == SONG_TYPE_FILE)
+ song_is_file(playlist.songs[i]))
fprintf(fp, "%s\n", rmp2amp_r(tmp, tmp));
else
fprintf(fp, "%s\n", tmp);
diff --git a/src/song.c b/src/song.c
index e1d8bb1b8..ab98963ad 100644
--- a/src/song.c
+++ b/src/song.c
@@ -29,21 +29,19 @@
#include "os_compat.h"
-static Song *
-song_alloc(const char *url, enum song_type type, Directory *parent)
+static Song * song_alloc(const char *url, Directory *parent)
{
size_t urllen = strlen(url);
Song *song = xmalloc(sizeof(Song) + urllen);
song->tag = NULL;
memcpy(song->url, url, urllen + 1);
- song->type = type;
song->parentDir = parent;
return song;
}
-Song *newSong(const char *url, enum song_type type, Directory * parentDir)
+Song *newSong(const char *url, Directory * parentDir)
{
Song *song;
@@ -52,11 +50,9 @@ Song *newSong(const char *url, enum song_type type, Directory * parentDir)
return NULL;
}
- song = song_alloc(url, type, parentDir);
+ song = song_alloc(url, parentDir);
- assert(type == SONG_TYPE_URL || parentDir);
-
- if (song->type == SONG_TYPE_FILE) {
+ if (song_is_file(song)) {
InputPlugin *plugin;
unsigned int next = 0;
char path_max_tmp[MPD_PATH_MAX];
@@ -166,8 +162,7 @@ void readSongInfoIntoList(FILE * fp, Directory * parentDir)
if (!prefixcmp(buffer, SONG_KEY)) {
if (song)
insertSongIntoList(sv, song);
- song = song_alloc(buffer + strlen(SONG_KEY),
- SONG_TYPE_FILE, parentDir);
+ song = song_alloc(buffer + strlen(SONG_KEY), parentDir);
} else if (*buffer == 0) {
/* ignore empty lines (starting with '\0') */
} else if (song == NULL) {
@@ -204,7 +199,7 @@ void readSongInfoIntoList(FILE * fp, Directory * parentDir)
int updateSongInfo(Song * song)
{
- if (song->type == SONG_TYPE_FILE) {
+ if (song_is_file(song)) {
InputPlugin *plugin;
unsigned int next = 0;
char path_max_tmp[MPD_PATH_MAX];
diff --git a/src/song.h b/src/song.h
index aebc8f044..377a78814 100644
--- a/src/song.h
+++ b/src/song.h
@@ -30,11 +30,6 @@
#define SONG_BEGIN "songList begin"
#define SONG_END "songList end"
-enum song_type {
- SONG_TYPE_FILE = 1,
- SONG_TYPE_URL = 2
-};
-
#define SONG_FILE "file: "
#define SONG_TIME "Time: "
@@ -42,12 +37,10 @@ typedef struct _Song {
struct mpd_tag *tag;
struct _Directory *parentDir;
time_t mtime;
- enum song_type type;
char url[1];
} mpd_packed Song;
-Song *newSong(const char *url, enum song_type type,
- struct _Directory *parentDir);
+Song *newSong(const char *url, struct _Directory *parentDir);
void freeSong(Song *);
@@ -69,4 +62,9 @@ void printSongUrl(int fd, Song * song);
*/
char *get_song_url(char *path_max_tmp, Song * song);
+static inline int song_is_file(const Song *song)
+{
+ return !!song->parentDir;
+}
+
#endif
diff --git a/src/storedPlaylist.c b/src/storedPlaylist.c
index c1452ddb9..265301392 100644
--- a/src/storedPlaylist.c
+++ b/src/storedPlaylist.c
@@ -297,7 +297,7 @@ appendSongToStoredPlaylistByPath(const char *utf8path, Song *song)
s = utf8_to_fs_charset(path_max_tmp2, get_song_url(path_max_tmp, song));
- if (playlist_saveAbsolutePaths && song->type == SONG_TYPE_FILE)
+ if (playlist_saveAbsolutePaths && song_is_file(song))
s = rmp2amp_r(path_max_tmp, s);
fprintf(file, "%s\n", s);