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
23 #include <mpd/client.h>
28 struct mpdclient_playlist
{
29 /* queue version number (obtained from mpd_status) */
37 playlist_init(struct mpdclient_playlist
*playlist
);
39 /** remove and free all songs in the playlist */
41 playlist_clear(struct mpdclient_playlist
*playlist
);
45 mpdclient_playlist_free(struct mpdclient_playlist
*playlist
);
48 playlist_length(const struct mpdclient_playlist
*playlist
)
50 assert(playlist
!= NULL
);
51 assert(playlist
->list
!= NULL
);
53 return playlist
->list
->len
;
56 static inline gboolean
57 playlist_is_empty(const struct mpdclient_playlist
*playlist
)
59 return playlist_length(playlist
) == 0;
62 static inline struct mpd_song
*
63 playlist_get(const struct mpdclient_playlist
*playlist
, guint idx
)
65 assert(idx
< playlist_length(playlist
));
67 return g_ptr_array_index(playlist
->list
, idx
);
71 playlist_append(struct mpdclient_playlist
*playlist
, const struct mpd_song
*song
)
73 g_ptr_array_add(playlist
->list
, mpd_song_dup(song
));
77 playlist_set(const struct mpdclient_playlist
*playlist
, guint idx
,
78 const struct mpd_song
*song
)
80 assert(idx
< playlist_length(playlist
));
82 g_ptr_array_index(playlist
->list
, idx
) = mpd_song_dup(song
);
86 playlist_replace(struct mpdclient_playlist
*playlist
, guint idx
,
87 const struct mpd_song
*song
)
89 mpd_song_free(playlist_get(playlist
, idx
));
90 playlist_set(playlist
, idx
, song
);
93 static inline struct mpd_song
*
94 playlist_remove_reuse(struct mpdclient_playlist
*playlist
, guint idx
)
96 return g_ptr_array_remove_index(playlist
->list
, idx
);
100 playlist_remove(struct mpdclient_playlist
*playlist
, guint idx
)
102 mpd_song_free(playlist_remove_reuse(playlist
, idx
));
106 playlist_move(struct mpdclient_playlist
*playlist
,
107 unsigned dest
, unsigned src
);
109 const struct mpd_song
*
110 playlist_lookup_song(const struct mpdclient_playlist
*playlist
, unsigned id
);
112 const struct mpd_song
*
113 playlist_get_song(const struct mpdclient_playlist
*playlist
, gint index
);
116 playlist_get_index(const struct mpdclient_playlist
*playlist
,
117 const struct mpd_song
*song
);
120 playlist_get_index_from_id(const struct mpdclient_playlist
*playlist
,
124 playlist_get_index_from_file(const struct mpdclient_playlist
*playlist
,
125 const gchar
*filename
);
128 playlist_get_index_from_same_song(const struct mpdclient_playlist
*playlist
,
129 const struct mpd_song
*song
)
131 return playlist_get_index_from_file(playlist
, mpd_song_get_uri(song
));
135 playlist_get_id_from_uri(const struct mpdclient_playlist
*playlist
,
139 playlist_get_id_from_same_song(const struct mpdclient_playlist
*playlist
,
140 const struct mpd_song
*song
)
142 return playlist_get_id_from_uri(playlist
, mpd_song_get_uri(song
));