1 /* ncmpc (Ncurses MPD Client)
2 * (c) 2004-2010 The Music Player Daemon Project
3 * Project homepage: http://musicpd.org
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #ifndef MPDCLIENT_PLAYLIST_H
21 #define MPDCLIENT_PLAYLIST_H
25 #include <mpd/client.h>
30 struct mpdclient_playlist
{
31 /* queue version number (obtained from mpd_status) */
39 playlist_init(struct mpdclient_playlist
*playlist
);
41 /** remove and free all songs in the playlist */
43 playlist_clear(struct mpdclient_playlist
*playlist
);
47 mpdclient_playlist_free(struct mpdclient_playlist
*playlist
);
50 playlist_length(const struct mpdclient_playlist
*playlist
)
52 assert(playlist
!= NULL
);
53 assert(playlist
->list
!= NULL
);
55 return playlist
->list
->len
;
58 static inline gboolean
59 playlist_is_empty(const struct mpdclient_playlist
*playlist
)
61 return playlist_length(playlist
) == 0;
64 static inline struct mpd_song
*
65 playlist_get(const struct mpdclient_playlist
*playlist
, guint idx
)
67 assert(idx
< playlist_length(playlist
));
69 return g_ptr_array_index(playlist
->list
, idx
);
73 playlist_append(struct mpdclient_playlist
*playlist
, const struct mpd_song
*song
)
75 g_ptr_array_add(playlist
->list
, mpd_song_dup(song
));
79 playlist_set(const struct mpdclient_playlist
*playlist
, guint idx
,
80 const struct mpd_song
*song
)
82 assert(idx
< playlist_length(playlist
));
84 g_ptr_array_index(playlist
->list
, idx
) = mpd_song_dup(song
);
88 playlist_replace(struct mpdclient_playlist
*playlist
, guint idx
,
89 const struct mpd_song
*song
)
91 mpd_song_free(playlist_get(playlist
, idx
));
92 playlist_set(playlist
, idx
, song
);
95 static inline struct mpd_song
*
96 playlist_remove_reuse(struct mpdclient_playlist
*playlist
, guint idx
)
98 return g_ptr_array_remove_index(playlist
->list
, idx
);
102 playlist_remove(struct mpdclient_playlist
*playlist
, guint idx
)
104 mpd_song_free(playlist_remove_reuse(playlist
, idx
));
108 playlist_move(struct mpdclient_playlist
*playlist
,
109 unsigned dest
, unsigned src
);
111 const struct mpd_song
*
112 playlist_lookup_song(const struct mpdclient_playlist
*playlist
, unsigned id
);
114 const struct mpd_song
*
115 playlist_get_song(const struct mpdclient_playlist
*playlist
, gint index
);
118 playlist_get_index(const struct mpdclient_playlist
*playlist
,
119 const struct mpd_song
*song
);
122 playlist_get_index_from_id(const struct mpdclient_playlist
*playlist
,
126 playlist_get_index_from_file(const struct mpdclient_playlist
*playlist
,
127 const gchar
*filename
);
130 playlist_get_index_from_same_song(const struct mpdclient_playlist
*playlist
,
131 const struct mpd_song
*song
)
133 return playlist_get_index_from_file(playlist
, mpd_song_get_uri(song
));
138 playlist_get_id_from_uri(const struct mpdclient_playlist
*playlist
,
143 playlist_get_id_from_same_song(const struct mpdclient_playlist
*playlist
,
144 const struct mpd_song
*song
)
146 return playlist_get_id_from_uri(playlist
, mpd_song_get_uri(song
));