Song: add function song_equals()

decoder_is_current_song() now recognizes different instances of the
same physical song.
This commit is contained in:
Max Kellermann 2012-08-09 21:20:24 +02:00
parent 81e898375b
commit c2e4fe983d
3 changed files with 37 additions and 1 deletions

View File

@ -84,6 +84,33 @@ song_free(struct song *song)
g_free(song);
}
gcc_pure
static inline bool
directory_equals(const struct directory &a, const struct directory &b)
{
return strcmp(a.path, b.path) == 0;
}
gcc_pure
static inline bool
directory_is_same(const struct directory *a, const struct directory *b)
{
return a == b ||
(a != nullptr && b != nullptr &&
directory_equals(*a, *b));
}
bool
song_equals(const struct song *a, const struct song *b)
{
assert(a != nullptr);
assert(b != nullptr);
return directory_is_same(a->parent, b->parent) &&
strcmp(a->uri, b->uri) == 0;
}
char *
song_get_uri(const struct song *song)
{

View File

@ -20,6 +20,7 @@
#include "config.h"
#include "decoder_control.h"
#include "pipe.h"
#include "song.h"
#include <assert.h>
@ -111,7 +112,7 @@ decoder_is_current_song(const struct decoder_control *dc,
case DECODE_STATE_START:
case DECODE_STATE_DECODE:
return dc->song == song;
return song_equals(dc->song, song);
}
assert(false);

View File

@ -21,6 +21,7 @@
#define MPD_SONG_H
#include "util/list.h"
#include "gcc.h"
#include <stddef.h>
#include <stdbool.h>
@ -100,6 +101,13 @@ song_is_file(const struct song *song)
return song_in_database(song) || song->uri[0] == '/';
}
/**
* Returns true if both objects refer to the same physical song.
*/
gcc_pure
bool
song_equals(const struct song *a, const struct song *b);
bool
song_file_update(struct song *song);