]> git.sesse.net Git - vlc/blob - include/vlc_playlist.h
* it's information, not informations (you missed some, dj :P)
[vlc] / include / vlc_playlist.h
1 /*****************************************************************************
2  * vlc_playlist.h : Playlist functions
3  *****************************************************************************
4  * Copyright (C) 1999-2004 VideoLAN
5  * $Id$
6  *
7  * Authors: Samuel Hocevar <sam@zoy.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24 /**
25  *  \file
26  *  This file contain structures and function prototypes related
27  *  to the playlist in vlc
28  */
29
30 /**
31  * \defgroup vlc_playlist Playlist
32  * Brief description. Longer description
33  * @{
34  */
35
36 /**
37  * playlist export helper structure
38  */
39 struct playlist_export_t
40 {
41     char *psz_filename;
42     FILE *p_file;
43 };
44
45 /**
46  * playlist item
47  * \see playlist_t
48  */
49 struct playlist_item_t
50 {
51     input_item_t input;        /**< input item descriptor */
52
53     int        i_nb_played;    /**< How many times was this item played ? */
54     vlc_bool_t b_autodeletion; /**< Indicates whther this item is to
55                                 * be deleted after playback. True mean
56                                 * that this item is to be deleted
57                                 * after playback, false otherwise */
58     vlc_bool_t b_enabled;      /**< Indicates whether this item is to be
59                                 * played or skipped */
60     int        i_group;        /**< Which group does this item belongs to ? */
61     int        i_id;           /**< Unique id to track this item */
62 };
63
64 /**
65  * playlist group
66  * \see playlist_t
67  */
68 struct playlist_group_t
69 {
70     char *   psz_name;        /**< name of the group */
71     int      i_id;            /**< Identifier for the group */
72 };
73
74 /**
75  * Playlist status
76  */
77 typedef enum { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t;
78
79 /**
80  * Structure containing information about the playlist
81  */
82 struct playlist_t
83 {
84     VLC_COMMON_MEMBERS
85 /**
86    \name playlist_t
87    These members are uniq to playlist_t
88 */
89 /*@{*/
90     int                   i_index;  /**< current index into the playlist */
91     playlist_status_t     i_status; /**< current status of playlist */
92     int                   i_size;   /**< total size of the list */
93     int                   i_enabled; /**< How many items are enabled ? */
94     playlist_item_t **    pp_items; /**< array of pointers to the
95                                      * playlist items */
96     int                   i_groups; /**< How many groups are in the playlist */
97     playlist_group_t **   pp_groups;/**< array of pointers to the playlist
98                                      * groups */
99     int                   i_last_group; /**< Maximal group id given */
100     input_thread_t *      p_input;  /**< the input thread ascosiated
101                                      * with the current item */
102     int                   i_last_id; /**< Last id to an item */
103     int                   i_sort; /**< Last sorting applied to the playlist */
104     int                   i_order; /**< Last ordering applied to the playlist */
105     /*@}*/
106 };
107
108 #define SORT_ID 0
109 #define SORT_TITLE 1
110 #define SORT_AUTHOR 2
111 #define SORT_GROUP 3
112 #define SORT_RANDOM 4
113 #define SORT_DURATION 5
114
115 #define ORDER_NORMAL 0
116 #define ORDER_REVERSE 1
117
118 #define PLAYLIST_TYPE_MANUAL 1
119 #define PLAYLIST_TYPE_SAP 2
120
121 /*****************************************************************************
122  * Prototypes
123  *****************************************************************************/
124 #define playlist_Create(a) __playlist_Create(VLC_OBJECT(a))
125 playlist_t * __playlist_Create   ( vlc_object_t * );
126 void           playlist_Destroy  ( playlist_t * );
127
128 #define playlist_Play(p) playlist_Command(p,PLAYLIST_PLAY,0)
129 #define playlist_Pause(p) playlist_Command(p,PLAYLIST_PAUSE,0)
130 #define playlist_Stop(p) playlist_Command(p,PLAYLIST_STOP,0)
131 #define playlist_Next(p) playlist_Command(p,PLAYLIST_SKIP,1)
132 #define playlist_Prev(p) playlist_Command(p,PLAYLIST_SKIP,-1)
133 #define playlist_Skip(p,i) playlist_Command(p,PLAYLIST_SKIP,i)
134 #define playlist_Goto(p,i) playlist_Command(p,PLAYLIST_GOTO,i)
135
136 VLC_EXPORT( void, playlist_Command, ( playlist_t *, playlist_command_t, int ) );
137
138
139 /* Item management functions */
140 #define playlist_AddItem(p,pi,i1,i2) playlist_ItemAdd(p,pi,i1,i2)
141 #define playlist_ItemNew( a , b, c ) __playlist_ItemNew(VLC_OBJECT(a) , b , c )
142 VLC_EXPORT( playlist_item_t* , __playlist_ItemNew, ( vlc_object_t *,const char *,const char * ) );
143 VLC_EXPORT( void, playlist_ItemDelete, ( playlist_item_t * ) );
144 VLC_EXPORT( int,  playlist_ItemAdd, ( playlist_t *, playlist_item_t *, int, int ) );
145
146 /* Simple add/remove funcctions */
147 VLC_EXPORT( int,  playlist_Add,    ( playlist_t *, const char *, const char *, int, int ) );
148 VLC_EXPORT( int,  playlist_AddExt, ( playlist_t *, const char *, const char *, int, int, mtime_t, const char **,int ) );
149
150
151 VLC_EXPORT( int,  playlist_Clear, ( playlist_t * ) );
152 VLC_EXPORT( int,  playlist_Delete, ( playlist_t *, int ) );
153 VLC_EXPORT( int,  playlist_Disable, ( playlist_t *, int ) );
154 VLC_EXPORT( int,  playlist_Enable, ( playlist_t *, int ) );
155 VLC_EXPORT( int,  playlist_DisableGroup, ( playlist_t *, int ) );
156 VLC_EXPORT( int,  playlist_EnableGroup, ( playlist_t *, int ) );
157
158 /* Basic item information accessors */
159 VLC_EXPORT( int, playlist_ItemSetGroup, (playlist_item_t *, int ) );
160 VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *,  char * ) );
161 VLC_EXPORT( int, playlist_ItemSetDuration, (playlist_item_t *, mtime_t ) );
162
163 VLC_EXPORT( int, playlist_SetGroup, (playlist_t * , int , int ) );
164 VLC_EXPORT( int, playlist_SetName, (playlist_t *, int ,  char * ) );
165 VLC_EXPORT( int, playlist_SetDuration, (playlist_t *, int , mtime_t ) );
166
167 /* Item search functions */
168 VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *, int) );
169 VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int) );
170 VLC_EXPORT( playlist_item_t *, playlist_ItemGetByPos, (playlist_t *, int) );
171
172
173 /* Group management functions */
174 VLC_EXPORT( playlist_group_t *, playlist_CreateGroup, (playlist_t *, char* ) );
175 VLC_EXPORT( int, playlist_DeleteGroup, (playlist_t *, int ) );
176 VLC_EXPORT( char *, playlist_FindGroup, (playlist_t *, int ) );
177 VLC_EXPORT( int, playlist_GroupToId, (playlist_t *, char * ) );
178
179 /* Info functions */
180 VLC_EXPORT( char * , playlist_GetInfo, ( playlist_t * , int, const char *, const char *) );
181 VLC_EXPORT( char * , playlist_ItemGetInfo, ( playlist_item_t * , const char *, const char *) );
182
183 VLC_EXPORT( info_category_t*, playlist_ItemGetCategory, ( playlist_item_t *, const char *) );
184
185 VLC_EXPORT( info_category_t*, playlist_ItemCreateCategory, ( playlist_item_t *, const char *) );
186
187 VLC_EXPORT( int, playlist_AddInfo, (playlist_t *, int, const char * , const char *, const char *, ...) );
188 VLC_EXPORT( int, playlist_ItemAddInfo, (playlist_item_t *, const char * , const char *, const char *, ...) );
189
190 /* Option functions */
191 VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) );
192
193 /* Playlist sorting */
194 #define playlist_SortID(p, i) playlist_Sort( p, SORT_ID, i)
195 #define playlist_SortTitle(p, i) playlist_Sort( p, SORT_TITLE, i)
196 #define playlist_SortAuthor(p, i) playlist_Sort( p, SORT_AUTHOR, i)
197 #define playlist_SortGroup(p, i) playlist_Sort( p, SORT_GROUP, i)
198 VLC_EXPORT( int,  playlist_Sort, ( playlist_t *, int, int) );
199 VLC_EXPORT( int,  playlist_Move, ( playlist_t *, int, int ) );
200
201 /* Load/Save */
202 VLC_EXPORT( int,  playlist_Import, ( playlist_t *, const char * ) );
203 VLC_EXPORT( int,  playlist_Export, ( playlist_t *, const char *, const char * ) );
204
205 /**
206  *  tell if a playlist is currently playing.
207  *  \param p_playlist the playlist to check
208  *  \return true if playlist is playing, false otherwise
209  */
210 static inline vlc_bool_t playlist_IsPlaying( playlist_t * p_playlist )
211 {
212     vlc_bool_t b_playing;
213
214     vlc_mutex_lock( &p_playlist->object_lock );
215     b_playing = p_playlist->i_status == PLAYLIST_RUNNING;
216     vlc_mutex_unlock( &p_playlist->object_lock );
217
218     return( b_playing );
219 }
220
221 /**
222  *  tell if a playlist is currently empty
223  *  \param p_playlist the playlist to check
224  *  \return true if the playlist is empty, false otherwise
225  */
226 static inline vlc_bool_t playlist_IsEmpty( playlist_t * p_playlist )
227 {
228     vlc_bool_t b_empty;
229
230     vlc_mutex_lock( &p_playlist->object_lock );
231     b_empty = p_playlist->i_size == 0;
232     vlc_mutex_unlock( &p_playlist->object_lock );
233
234     return( b_empty );
235 }
236
237 /**
238  * @}
239  */