diff --git a/CHANGELOG b/CHANGELOG index cb2255ea..8995f7ac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +6.4.19: +- Remove deleted tracks from artist playlists + 6.4.19-rc: - Allow filtering specific fields - Replace filtering with a token matching system diff --git a/core/playlists/artist.c b/core/playlists/artist.c index 19fe6e80..b1ba5f6f 100644 --- a/core/playlists/artist.c +++ b/core/playlists/artist.c @@ -139,5 +139,14 @@ void pl_artist_new_track(struct track *track) artist->ar_playlist = playlist; } - queue_add(&playlist->pl_queue, track); + playlist_generic_add_track(playlist, track); +} + +void pl_artist_delete_track(struct track *track) +{ + struct artist *artist = track->tr_artist; + struct playlist *playlist = (struct playlist *)artist->ar_playlist; + + if (playlist) + playlist_generic_remove_track(playlist, track); } diff --git a/core/playlists/library.c b/core/playlists/library.c index 47e88ded..a5344fbb 100644 --- a/core/playlists/library.c +++ b/core/playlists/library.c @@ -126,6 +126,7 @@ static bool __lib_pl_update(void *data) path = track_path(TRACK(dbe)); if (g_access(path, F_OK) < 0) { pl_system_delete_track(TRACK(dbe)); + pl_artist_delete_track(TRACK(dbe)); queue_remove_all(&playlist->pl_queue, TRACK(dbe)); track_remove(TRACK(dbe)); } diff --git a/include/core/playlists/artist.h b/include/core/playlists/artist.h index afa02f32..4f4a6952 100644 --- a/include/core/playlists/artist.h +++ b/include/core/playlists/artist.h @@ -18,4 +18,7 @@ void pl_artist_deinit(); /* Called to tell system playlists about a new track. */ void pl_artist_new_track(struct track *); +/* Called to tell artist playlists that a track is getting deleted. */ +void pl_artist_delete_track(struct track *); + #endif /* OCARINA_CORE_PLAYLISTS_ARTIST_H */