diff --git a/core/tags/track.c b/core/tags/track.c index 23f58f29..232c9e3b 100644 --- a/core/tags/track.c +++ b/core/tags/track.c @@ -310,6 +310,12 @@ int track_compare(struct track *lhs, struct track *rhs, enum compare_t compare) return 0; /* We should never get here. */ } +bool track_match_token(struct track *track, const gchar *token) +{ + return string_match_token(token, track->tr_tokens) || + string_match_token(token, track->tr_alts); +} + gchar *track_path(struct track *track) { gchar *path, *res; diff --git a/include/core/tags/track.h b/include/core/tags/track.h index 351631ce..2158ba18 100644 --- a/include/core/tags/track.h +++ b/include/core/tags/track.h @@ -99,6 +99,9 @@ struct track *track_get(const unsigned int); /* Called to compare two track tags */ int track_compare(struct track *, struct track *, enum compare_t); +/* Called to check if a track has a token that matches the given string */ +bool track_match_token(struct track *, const gchar *); + /* * Called to find the full path of the track tag. * This function returns a new string that MUST be freed with g_free(). diff --git a/tests/core/tags/track.c b/tests/core/tags/track.c index b2e3402f..43557b25 100644 --- a/tests/core/tags/track.c +++ b/tests/core/tags/track.c @@ -91,6 +91,10 @@ static void test_track() test_verify_track(track); test_equal(library->li_size, 1); + test_equal(track_match_token(track, "title"), (bool)true); + test_equal(track_match_token(track, "theme"), (bool)true); + test_equal(track_match_token(track, "hyrule"), (bool)false); + file_open(&f, OPEN_WRITE); file_writef(&f, "0 0 0 0 0 0 0 0 0 0 \n"); file_writef(&f, "Hyrule Symphony/00 - No Track.ogg\n");