X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffilelist.h;h=f8ada59e3ad8cdeecb22abb9215f648c92f41280;hb=a9ea2ab4bad5e5044e95e1037ea8f676b75a4db8;hp=bc467fb65bb45ad1746b10a44485e8c4e6e8fb19;hpb=e12ebb484bf369ea425e93521d99cc6813996e4e;p=ncmpc.git diff --git a/src/filelist.h b/src/filelist.h index bc467fb..f8ada59 100644 --- a/src/filelist.h +++ b/src/filelist.h @@ -1,6 +1,6 @@ -/* - * (c) 2004 by Kalle Wallin - * (c) 2008 Max Kellermann +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2017 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 @@ -11,34 +11,34 @@ * 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 FILELIST_H #define FILELIST_H +#include "Compiler.h" + #include +struct mpd_connection; struct mpd_song; -typedef struct filelist_entry { +struct filelist_entry { guint flags; - struct mpd_InfoEntity *entity; -} filelist_entry_t; - -typedef struct filelist { - /* path */ - gchar *path; + struct mpd_entity *entity; +}; +struct filelist { /* the list */ GPtrArray *entries; -} mpdclient_filelist_t; +}; struct filelist * -filelist_new(const char *path); +filelist_new(void); void filelist_free(struct filelist *filelist); @@ -55,6 +55,7 @@ filelist_is_empty(const struct filelist *filelist) return filelist_length(filelist) == 0; } +gcc_pure static inline struct filelist_entry * filelist_get(const struct filelist *filelist, guint i) { @@ -62,21 +63,52 @@ filelist_get(const struct filelist *filelist, guint i) } struct filelist_entry * -filelist_append(struct filelist *filelist, struct mpd_InfoEntity *entity); - -struct filelist_entry * -filelist_prepend(struct filelist *filelist, struct mpd_InfoEntity *entity); +filelist_append(struct filelist *filelist, struct mpd_entity *entity); void filelist_move(struct filelist *filelist, struct filelist *from); +gcc_pure +gint +compare_filelist_entry_path(gconstpointer filelist_entry1, + gconstpointer filelist_entry2); + +/* Sorts the whole filelist, at the moment used by filelist_search */ +void +filelist_sort_all(struct filelist *filelist, GCompareFunc compare_func); + +/* Only sorts the directories and playlist files. + * The songs stay in the order it came from mpd. */ +void +filelist_sort_dir_play(struct filelist *filelist, GCompareFunc compare_func); + +/** + * Eliminates duplicate songs from the filelist. + */ void -filelist_sort(struct filelist *filelist, GCompareFunc compare_func); +filelist_no_duplicates(struct filelist *filelist); +gcc_pure int -filelist_find_song(struct filelist *flist, const struct mpd_song *song); +filelist_find_song(const struct filelist *flist, const struct mpd_song *song); +gcc_pure int -filelist_find_directory(struct filelist *filelist, const char *name); +filelist_find_directory(const struct filelist *filelist, const char *name); + +/** + * Receives entities from the connection, and appends them to the + * specified filelist. This does not finish the response, and does + * not check for errors. + */ +void +filelist_recv(struct filelist *filelist, struct mpd_connection *connection); + +/** + * Creates a new filelist and receives entities from the connection. + * This does not finish the response, and does not check for errors. + */ +struct filelist * +filelist_new_recv(struct mpd_connection *connection); #endif