Song: add function song_equals()
decoder_is_current_song() now recognizes different instances of the same physical song.
This commit is contained in:
parent
81e898375b
commit
c2e4fe983d
27
src/Song.cxx
27
src/Song.cxx
@ -84,6 +84,33 @@ song_free(struct song *song)
|
|||||||
g_free(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 *
|
char *
|
||||||
song_get_uri(const struct song *song)
|
song_get_uri(const struct song *song)
|
||||||
{
|
{
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "decoder_control.h"
|
#include "decoder_control.h"
|
||||||
#include "pipe.h"
|
#include "pipe.h"
|
||||||
|
#include "song.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
@ -111,7 +112,7 @@ decoder_is_current_song(const struct decoder_control *dc,
|
|||||||
|
|
||||||
case DECODE_STATE_START:
|
case DECODE_STATE_START:
|
||||||
case DECODE_STATE_DECODE:
|
case DECODE_STATE_DECODE:
|
||||||
return dc->song == song;
|
return song_equals(dc->song, song);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(false);
|
assert(false);
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#define MPD_SONG_H
|
#define MPD_SONG_H
|
||||||
|
|
||||||
#include "util/list.h"
|
#include "util/list.h"
|
||||||
|
#include "gcc.h"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
@ -100,6 +101,13 @@ song_is_file(const struct song *song)
|
|||||||
return song_in_database(song) || song->uri[0] == '/';
|
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
|
bool
|
||||||
song_file_update(struct song *song);
|
song_file_update(struct song *song);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user