MPD 0.17~git
|
00001 /* 00002 * Copyright (C) 2003-2011 The Music Player Daemon Project 00003 * http://www.musicpd.org 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License along 00016 * with this program; if not, write to the Free Software Foundation, Inc., 00017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00018 */ 00019 00020 #ifndef MPD_PLAYLIST_H 00021 #define MPD_PLAYLIST_H 00022 00023 #include "queue.h" 00024 #include "playlist_error.h" 00025 00026 #include <stdbool.h> 00027 00028 struct player_control; 00029 00030 struct playlist { 00034 struct queue queue; 00035 00040 bool playing; 00041 00047 bool stop_on_error; 00048 00054 unsigned error_count; 00055 00061 int current; 00062 00070 int queued; 00071 }; 00072 00074 extern struct playlist g_playlist; 00075 00076 void 00077 playlist_global_init(void); 00078 00079 void 00080 playlist_global_finish(void); 00081 00082 void 00083 playlist_init(struct playlist *playlist); 00084 00085 void 00086 playlist_finish(struct playlist *playlist); 00087 00088 void 00089 playlist_tag_changed(struct playlist *playlist); 00090 00094 static inline const struct queue * 00095 playlist_get_queue(const struct playlist *playlist) 00096 { 00097 return &playlist->queue; 00098 } 00099 00100 void 00101 playlist_clear(struct playlist *playlist, struct player_control *pc); 00102 00103 #ifndef WIN32 00104 00108 enum playlist_result 00109 playlist_append_file(struct playlist *playlist, struct player_control *pc, 00110 const char *path, int uid, unsigned *added_id); 00111 #endif 00112 00113 enum playlist_result 00114 playlist_append_uri(struct playlist *playlist, struct player_control *pc, 00115 const char *file, unsigned *added_id); 00116 00117 enum playlist_result 00118 playlist_append_song(struct playlist *playlist, struct player_control *pc, 00119 struct song *song, unsigned *added_id); 00120 00121 enum playlist_result 00122 playlist_delete(struct playlist *playlist, struct player_control *pc, 00123 unsigned song); 00124 00131 enum playlist_result 00132 playlist_delete_range(struct playlist *playlist, struct player_control *pc, 00133 unsigned start, unsigned end); 00134 00135 enum playlist_result 00136 playlist_delete_id(struct playlist *playlist, struct player_control *pc, 00137 unsigned song); 00138 00139 void 00140 playlist_stop(struct playlist *playlist, struct player_control *pc); 00141 00142 enum playlist_result 00143 playlist_play(struct playlist *playlist, struct player_control *pc, 00144 int song); 00145 00146 enum playlist_result 00147 playlist_play_id(struct playlist *playlist, struct player_control *pc, 00148 int song); 00149 00150 void 00151 playlist_next(struct playlist *playlist, struct player_control *pc); 00152 00153 void 00154 playlist_sync(struct playlist *playlist, struct player_control *pc); 00155 00156 void 00157 playlist_previous(struct playlist *playlist, struct player_control *pc); 00158 00159 void 00160 playlist_shuffle(struct playlist *playlist, struct player_control *pc, 00161 unsigned start, unsigned end); 00162 00163 void 00164 playlist_delete_song(struct playlist *playlist, struct player_control *pc, 00165 const struct song *song); 00166 00167 enum playlist_result 00168 playlist_move_range(struct playlist *playlist, struct player_control *pc, 00169 unsigned start, unsigned end, int to); 00170 00171 enum playlist_result 00172 playlist_move_id(struct playlist *playlist, struct player_control *pc, 00173 unsigned id, int to); 00174 00175 enum playlist_result 00176 playlist_swap_songs(struct playlist *playlist, struct player_control *pc, 00177 unsigned song1, unsigned song2); 00178 00179 enum playlist_result 00180 playlist_swap_songs_id(struct playlist *playlist, struct player_control *pc, 00181 unsigned id1, unsigned id2); 00182 00183 enum playlist_result 00184 playlist_set_priority(struct playlist *playlist, struct player_control *pc, 00185 unsigned start_position, unsigned end_position, 00186 uint8_t priority); 00187 00188 enum playlist_result 00189 playlist_set_priority_id(struct playlist *playlist, struct player_control *pc, 00190 unsigned song_id, uint8_t priority); 00191 00192 bool 00193 playlist_get_repeat(const struct playlist *playlist); 00194 00195 void 00196 playlist_set_repeat(struct playlist *playlist, struct player_control *pc, 00197 bool status); 00198 00199 bool 00200 playlist_get_random(const struct playlist *playlist); 00201 00202 void 00203 playlist_set_random(struct playlist *playlist, struct player_control *pc, 00204 bool status); 00205 00206 bool 00207 playlist_get_single(const struct playlist *playlist); 00208 00209 void 00210 playlist_set_single(struct playlist *playlist, struct player_control *pc, 00211 bool status); 00212 00213 bool 00214 playlist_get_consume(const struct playlist *playlist); 00215 00216 void 00217 playlist_set_consume(struct playlist *playlist, bool status); 00218 00219 int 00220 playlist_get_current_song(const struct playlist *playlist); 00221 00222 int 00223 playlist_get_next_song(const struct playlist *playlist); 00224 00225 unsigned 00226 playlist_get_song_id(const struct playlist *playlist, unsigned song); 00227 00228 int 00229 playlist_get_length(const struct playlist *playlist); 00230 00231 unsigned long 00232 playlist_get_version(const struct playlist *playlist); 00233 00234 enum playlist_result 00235 playlist_seek_song(struct playlist *playlist, struct player_control *pc, 00236 unsigned song, float seek_time); 00237 00238 enum playlist_result 00239 playlist_seek_song_id(struct playlist *playlist, struct player_control *pc, 00240 unsigned id, float seek_time); 00241 00250 enum playlist_result 00251 playlist_seek_current(struct playlist *playlist, struct player_control *pc, 00252 float seek_time, bool relative); 00253 00254 void 00255 playlist_increment_version_all(struct playlist *playlist); 00256 00257 #endif