playlist.h 4.04 KB
Newer Older
Warren Dukes's avatar
Warren Dukes committed
1
/* the Music Player Daemon (MPD)
2
 * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
Warren Dukes's avatar
Warren Dukes committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
 * This project's homepage is: http://www.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
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * 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
 */

#ifndef PLAYLIST_H
#define PLAYLIST_H

Max Kellermann's avatar
Max Kellermann committed
22
#include "locate.h"
Warren Dukes's avatar
Warren Dukes committed
23

24
#include <stdbool.h>
25 26
#include <stdio.h>

Warren Dukes's avatar
Warren Dukes committed
27
#define PLAYLIST_FILE_SUFFIX 	"m3u"
28 29
#define PLAYLIST_COMMENT	'#'

30 31
struct client;

32 33 34 35 36 37 38 39 40 41 42 43
enum playlist_result {
	PLAYLIST_RESULT_SUCCESS,
	PLAYLIST_RESULT_ERRNO,
	PLAYLIST_RESULT_NO_SUCH_SONG,
	PLAYLIST_RESULT_NO_SUCH_LIST,
	PLAYLIST_RESULT_LIST_EXISTS,
	PLAYLIST_RESULT_BAD_NAME,
	PLAYLIST_RESULT_BAD_RANGE,
	PLAYLIST_RESULT_NOT_PLAYING,
	PLAYLIST_RESULT_TOO_LARGE
};

44
typedef struct _Playlist {
45
	struct song **songs;
46
	/* holds version a song was modified on */
47
	uint32_t *songMod;
48 49 50 51 52 53
	int *order;
	int *positionToId;
	int *idToPosition;
	int length;
	int current;
	int queued;
54 55
	bool repeat;
	bool random;
56
	uint32_t version;
57 58
} Playlist;

59
extern bool playlist_saveAbsolutePaths;
Warren Dukes's avatar
Warren Dukes committed
60

61 62
extern int playlist_max_length;

63
void initPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
64

65
void finishPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
66

67
void readPlaylistState(FILE *);
Warren Dukes's avatar
Warren Dukes committed
68

69
void savePlaylistState(FILE *);
Warren Dukes's avatar
Warren Dukes committed
70

71
void clearPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
72

73
int clearStoredPlaylist(const char *utf8file);
74

75
enum playlist_result addToPlaylist(const char *file, int *added_id);
Warren Dukes's avatar
Warren Dukes committed
76

77
int addToStoredPlaylist(const char *file, const char *utf8file);
78

79 80
enum playlist_result
addSongToPlaylist(struct song *song, int *added_id);
Warren Dukes's avatar
Warren Dukes committed
81

82
void showPlaylist(struct client *client);
Warren Dukes's avatar
Warren Dukes committed
83

84
enum playlist_result deleteFromPlaylist(int song);
Warren Dukes's avatar
Warren Dukes committed
85

86
enum playlist_result deleteFromPlaylistById(int song);
87

88
enum playlist_result playlistInfo(struct client *client, int song);
Warren Dukes's avatar
Warren Dukes committed
89

90
enum playlist_result playlistId(struct client *client, int song);
91

92
void stopPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
93

94
enum playlist_result playPlaylist(int song, int stopOnError);
Warren Dukes's avatar
Warren Dukes committed
95

96
enum playlist_result playPlaylistById(int song, int stopOnError);
97

98
void nextSongInPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
99

100
void syncPlayerAndPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
101

102
void previousSongInPlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
103

104
void shufflePlaylist(void);
Warren Dukes's avatar
Warren Dukes committed
105

106
enum playlist_result savePlaylist(const char *utf8file);
Warren Dukes's avatar
Warren Dukes committed
107

108
enum playlist_result deletePlaylist(const char *utf8file);
109

110 111
void
deleteASongFromPlaylist(const struct song *song);
Warren Dukes's avatar
Warren Dukes committed
112

113
enum playlist_result moveSongInPlaylist(int from, int to);
Warren Dukes's avatar
Warren Dukes committed
114

115
enum playlist_result moveSongInPlaylistById(int id, int to);
116

117
enum playlist_result swapSongsInPlaylist(int song1, int song2);
Warren Dukes's avatar
Warren Dukes committed
118

119
enum playlist_result swapSongsInPlaylistById(int id1, int id2);
120

121
enum playlist_result loadPlaylist(struct client *client, const char *utf8file);
Warren Dukes's avatar
Warren Dukes committed
122

123
bool getPlaylistRepeatStatus(void);
Warren Dukes's avatar
Warren Dukes committed
124

125
void setPlaylistRepeatStatus(bool status);
Warren Dukes's avatar
Warren Dukes committed
126

127
bool getPlaylistRandomStatus(void);
Warren Dukes's avatar
Warren Dukes committed
128

129
void setPlaylistRandomStatus(bool status);
Warren Dukes's avatar
Warren Dukes committed
130

131
int getPlaylistCurrentSong(void);
Warren Dukes's avatar
Warren Dukes committed
132

133 134
int getPlaylistSongId(int song);

135
int getPlaylistLength(void);
Warren Dukes's avatar
Warren Dukes committed
136

137
unsigned long getPlaylistVersion(void);
Warren Dukes's avatar
Warren Dukes committed
138

139
void playPlaylistIfPlayerStopped(void);
Warren Dukes's avatar
Warren Dukes committed
140

141
enum playlist_result seekSongInPlaylist(int song, float seek_time);
Warren Dukes's avatar
Warren Dukes committed
142

143
enum playlist_result seekSongInPlaylistById(int id, float seek_time);
144

145
void playlistVersionChange(void);
146

147
int playlistChanges(struct client *client, uint32_t version);
148

149
int playlistChangesPosId(struct client *client, uint32_t version);
150

151
int PlaylistInfo(struct client *client, const char *utf8file, int detail);
152

153 154
void searchForSongsInPlaylist(struct client *client,
			      int numItems, LocateTagItem * items);
155

156 157
void findSongsInPlaylist(struct client *client,
			 int numItems, LocateTagItem * items);
158

159 160
int is_valid_playlist_name(const char *utf8path);

Warren Dukes's avatar
Warren Dukes committed
161
#endif