song: added song_in_database()

Some functions assume that a song is not in the database when it is a
remote song.  Based on that, they decide whether they are responsible
for freeing the song struct.  Add a special function which checks
whether a song is in the database (currently equal to song_is_file()).
This commit is contained in:
Max Kellermann 2008-10-15 22:34:47 +02:00
parent 4a7ad5b618
commit 6d3488c8b3
2 changed files with 14 additions and 9 deletions

View File

@ -181,11 +181,9 @@ static int getNextId(void)
void finishPlaylist(void)
{
int i;
for (i = 0; i < playlist.length; i++) {
if (!song_is_file(playlist.songs[i])) {
for (i = 0; i < playlist.length; i++)
if (!song_in_database(playlist.songs[i]))
song_free(playlist.songs[i]);
}
}
playlist.length = 0;
@ -208,9 +206,9 @@ void clearPlaylist(void)
stopPlaylist();
for (i = 0; i < playlist.length; i++) {
if (!song_is_file(playlist.songs[i])) {
if (!song_in_database(playlist.songs[i]))
song_free(playlist.songs[i]);
}
playlist.idToPosition[playlist.positionToId[i]] = -1;
playlist.songs[i] = NULL;
}
@ -678,9 +676,8 @@ enum playlist_result deleteFromPlaylist(int song)
|| playlist.order[playlist.current] == song))
clearPlayerQueue();
if (!song_is_file(playlist.songs[song])) {
if (!song_in_database(playlist.songs[song]))
song_free(playlist.songs[song]);
}
playlist.idToPosition[playlist.positionToId[song]] = -1;
@ -858,6 +855,8 @@ static void syncCurrentPlayerDecodeMetadata(void)
if (!song_is_file(song) &&
0 == strcmp(song_get_url(song, path_max_tmp), songPlayer->url) &&
!tag_equal(song->tag, songPlayer->tag)) {
assert(!song_in_database(song));
if (song->tag)
tag_free(song->tag);
song->tag = tag_dup(songPlayer->tag);

View File

@ -68,9 +68,15 @@ char *
song_get_url(const struct song *song, char *path_max_tmp);
static inline bool
song_is_file(const struct song *song)
song_in_database(const struct song *song)
{
return song->parent != NULL;
}
static inline bool
song_is_file(const struct song *song)
{
return song_in_database(song);
}
#endif