MPD 0.17~git
src/playlist.h
Go to the documentation of this file.
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