X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fplaylist.h;h=2754afad8793faf1fcc7426669606802c2426e1d;hb=e7c6e5fe86fb1660a291eecce441c936f2877f53;hp=2d2a353a68b9737f74845a46dabdaf9ec30a6ceb;hpb=eee102e5ddd2c400d707bffe21d9c6ec74507371;p=ncmpc.git diff --git a/src/playlist.h b/src/playlist.h index 2d2a353..2754afa 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -1,8 +1,6 @@ -/* - * $Id$ - * - * (c) 2004 by Kalle Wallin - * (c) 2008 Max Kellermann +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2010 The Music Player Daemon Project + * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -13,43 +11,139 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef MPDCLIENT_PLAYLIST_H #define MPDCLIENT_PLAYLIST_H -#include "libmpdclient.h" +#include "Compiler.h" + +#include +#include #include -struct mpdclient; +struct mpdclient_playlist { + /* queue version number (obtained from mpd_status) */ + unsigned version; -typedef struct mpdclient_playlist { - /* playlist id */ - long long id; + /* the list */ + GPtrArray *list; +}; - /* true if the list is updated */ - gboolean updated; +void +playlist_init(struct mpdclient_playlist *playlist); - /* the list */ - GArray *list; -} mpdclient_playlist_t; +/** remove and free all songs in the playlist */ +void +playlist_clear(struct mpdclient_playlist *playlist); /* free a playlist */ -gint mpdclient_playlist_free(mpdclient_playlist_t *playlist); +gint +mpdclient_playlist_free(struct mpdclient_playlist *playlist); + +static inline guint +playlist_length(const struct mpdclient_playlist *playlist) +{ + assert(playlist != NULL); + assert(playlist->list != NULL); + + return playlist->list->len; +} + +static inline gboolean +playlist_is_empty(const struct mpdclient_playlist *playlist) +{ + return playlist_length(playlist) == 0; +} + +static inline struct mpd_song * +playlist_get(const struct mpdclient_playlist *playlist, guint idx) +{ + assert(idx < playlist_length(playlist)); + + return g_ptr_array_index(playlist->list, idx); +} + +static inline void +playlist_append(struct mpdclient_playlist *playlist, const struct mpd_song *song) +{ + g_ptr_array_add(playlist->list, mpd_song_dup(song)); +} + +static inline void +playlist_set(const struct mpdclient_playlist *playlist, guint idx, + const struct mpd_song *song) +{ + assert(idx < playlist_length(playlist)); + + g_ptr_array_index(playlist->list, idx) = mpd_song_dup(song); +} + +static inline void +playlist_replace(struct mpdclient_playlist *playlist, guint idx, + const struct mpd_song *song) +{ + mpd_song_free(playlist_get(playlist, idx)); + playlist_set(playlist, idx, song); +} + +static inline struct mpd_song * +playlist_remove_reuse(struct mpdclient_playlist *playlist, guint idx) +{ + return g_ptr_array_remove_index(playlist->list, idx); +} + +static inline void +playlist_remove(struct mpdclient_playlist *playlist, guint idx) +{ + mpd_song_free(playlist_remove_reuse(playlist, idx)); +} + +void +playlist_move(struct mpdclient_playlist *playlist, + unsigned dest, unsigned src); + +const struct mpd_song * +playlist_lookup_song(const struct mpdclient_playlist *playlist, unsigned id); + +const struct mpd_song * +playlist_get_song(const struct mpdclient_playlist *playlist, gint index); + +gint +playlist_get_index(const struct mpdclient_playlist *playlist, + const struct mpd_song *song); -struct mpd_song *playlist_lookup_song(struct mpdclient *c, gint id); +gint +playlist_get_index_from_id(const struct mpdclient_playlist *playlist, + unsigned id); -struct mpd_song *playlist_get_song(struct mpdclient *c, gint index); +gint +playlist_get_index_from_file(const struct mpdclient_playlist *playlist, + const gchar *filename); -gint playlist_get_index(struct mpdclient *c, struct mpd_song *song); +static inline gint +playlist_get_index_from_same_song(const struct mpdclient_playlist *playlist, + const struct mpd_song *song) +{ + return playlist_get_index_from_file(playlist, mpd_song_get_uri(song)); +} -gint playlist_get_index_from_id(struct mpdclient *c, gint id); +gcc_pure +gint +playlist_get_id_from_uri(const struct mpdclient_playlist *playlist, + const gchar *uri); -gint playlist_get_index_from_file(struct mpdclient *c, gchar *filename); +gcc_pure +static inline gint +playlist_get_id_from_same_song(const struct mpdclient_playlist *playlist, + const struct mpd_song *song) +{ + return playlist_get_id_from_uri(playlist, mpd_song_get_uri(song)); +} #endif