X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_playlist.h;h=cb7cb12aa967149440a476675fa45d818784077a;hb=3fc7cdd5bcc3d96c0150c811bcd752dee478ba91;hp=05b49c9061bd01773fd9e8c1a92a930d2a70a547;hpb=382926a8c14406854dae7eb79de693ffe1284ed0;p=vlc diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h index 05b49c9061..cb7cb12aa9 100644 --- a/include/vlc_playlist.h +++ b/include/vlc_playlist.h @@ -68,18 +68,22 @@ struct playlist_item_t int i_nb_played; /**< How many times was this item played ? */ + + /* LEGACY FIELDS */ vlc_bool_t b_autodeletion; /**< Indicates whther this item is to * be deleted after playback. True mean * that this item is to be deleted * after playback, false otherwise */ vlc_bool_t b_enabled; /**< Indicates whether this item is to be * played or skipped */ + /* END LEGACY FIELDS */ }; -#define PLAYLIST_SAVE_FLAG 0x1 /**< Must it be saved */ -#define PLAYLIST_SKIP_FLAG 0x2 /**< Must playlist skip after it ? */ -#define PLAYLIST_ENA_FLAG 0x4 /**< Is it enabled ? */ -#define PLAYLIST_DEL_FLAG 0x8 /**< Autodelete ? */ +#define PLAYLIST_SAVE_FLAG 0x01 /**< Must it be saved */ +#define PLAYLIST_SKIP_FLAG 0x02 /**< Must playlist skip after it ? */ +#define PLAYLIST_ENA_FLAG 0x04 /**< Is it enabled ? */ +#define PLAYLIST_DEL_FLAG 0x08 /**< Autodelete ? */ +#define PLAYLIST_RO_FLAG 0x10 /**< Write-enabled ? */ /** * playlist view @@ -124,6 +128,14 @@ struct services_discovery_t void (*pf_run) ( services_discovery_t *); }; +struct playlist_preparse_t +{ + VLC_COMMON_MEMBERS + vlc_mutex_t lock; + int i_waiting; + input_item_t **pp_waiting; +}; + /** * Structure containing information about the playlist @@ -142,6 +154,9 @@ struct playlist_t int i_size; /**< total size of the list */ playlist_item_t ** pp_items; /**< array of pointers to the * playlist items */ + int i_all_size; /**< size of list of items and nodes */ + playlist_item_t ** pp_all_items; /**< array of pointers to the + * playlist items and nodes */ int i_views; /**< Number of views */ playlist_view_t ** pp_views; /**< array of pointers to the @@ -188,15 +203,27 @@ struct playlist_t vlc_bool_t b_request; /**< Set to true by the requester The playlist sets it back to false when processing the request */ - vlc_mutex_t lock; /**< Lock to protect request */ + vlc_mutex_t lock; /**< Lock to protect request */ } request; + playlist_preparse_t *p_preparse; + /*@}*/ }; +/* Helper to add an item */ +struct playlist_add_t +{ + playlist_item_t *p_node; + playlist_item_t *p_item; + int i_view; + int i_position; +}; + #define SORT_ID 0 #define SORT_TITLE 1 -#define SORT_AUTHOR 2 +#define SORT_TITLE_NODES_FIRST 2 +#define SORT_AUTHOR 3 #define SORT_RANDOM 4 #define SORT_DURATION 5 @@ -210,26 +237,29 @@ struct playlist_t /* Creation/Deletion */ #define playlist_Create(a) __playlist_Create(VLC_OBJECT(a)) playlist_t * __playlist_Create ( vlc_object_t * ); -void playlist_Destroy ( playlist_t * ); +int playlist_Destroy ( playlist_t * ); /* Playlist control */ -#define playlist_Play(p) playlist_Control(p,PLAYLIST_PLAY ) -#define playlist_Pause(p) playlist_Control(p,PLAYLIST_PAUSE ) -#define playlist_Stop(p) playlist_Control(p,PLAYLIST_STOP ) -#define playlist_Next(p) playlist_Control(p,PLAYLIST_SKIP , 1) -#define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP , -1) -#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP,i) -#define playlist_Goto(p,i) playlist_Control(p,PLAYLIST_GOTO,i) +#define playlist_Play(p) playlist_LockControl(p,PLAYLIST_PLAY ) +#define playlist_Pause(p) playlist_LockControl(p,PLAYLIST_PAUSE ) +#define playlist_Stop(p) playlist_LockControl(p,PLAYLIST_STOP ) +#define playlist_Next(p) playlist_LockControl(p,PLAYLIST_SKIP, 1) +#define playlist_Prev(p) playlist_LockControl(p,PLAYLIST_SKIP, -1) +#define playlist_Skip(p,i) playlist_LockControl(p,PLAYLIST_SKIP, i) +#define playlist_Goto(p,i) playlist_LockControl(p,PLAYLIST_GOTO, i) VLC_EXPORT( int, playlist_Control, ( playlist_t *, int, ... ) ); +VLC_EXPORT( int, playlist_LockControl, ( playlist_t *, int, ... ) ); VLC_EXPORT( int, playlist_Clear, ( playlist_t * ) ); +VLC_EXPORT( int, playlist_LockClear, ( playlist_t * ) ); +VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) ); /* Services discovery */ VLC_EXPORT( int, playlist_ServicesDiscoveryAdd, (playlist_t *, const char *)); -VLC_EXPORT( void, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *)); +VLC_EXPORT( int, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *)); VLC_EXPORT( int, playlist_AddSDModules, (playlist_t *, char *)); VLC_EXPORT( vlc_bool_t, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const char *)); @@ -237,10 +267,13 @@ VLC_EXPORT( vlc_bool_t, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const /* Item management functions (act on items) */ #define playlist_AddItem(p,pi,i1,i2) playlist_ItemAdd(p,pi,i1,i2) #define playlist_ItemNew( a , b, c ) __playlist_ItemNew(VLC_OBJECT(a) , b , c ) +#define playlist_ItemCopy( a, b ) __playlist_ItemCopy(VLC_OBJECT(a), b ) VLC_EXPORT( playlist_item_t* , __playlist_ItemNew, ( vlc_object_t *,const char *,const char * ) ); -VLC_EXPORT( void, playlist_ItemDelete, ( playlist_item_t * ) ); -VLC_EXPORT( void, playlist_ItemAddParent, ( playlist_item_t *, int,playlist_item_t *) ); -VLC_EXPORT( void, playlist_CopyParents, ( playlist_item_t *,playlist_item_t *) ); +VLC_EXPORT( playlist_item_t* , __playlist_ItemCopy, ( vlc_object_t *,playlist_item_t* ) ); +VLC_EXPORT( playlist_item_t* , playlist_ItemNewWithType, ( vlc_object_t *,const char *,const char *, int ) ); +VLC_EXPORT( int, playlist_ItemDelete, ( playlist_item_t * ) ); +VLC_EXPORT( int, playlist_ItemAddParent, ( playlist_item_t *, int,playlist_item_t *) ); +VLC_EXPORT( int, playlist_CopyParents, ( playlist_item_t *,playlist_item_t *) ); /* Item informations accessors */ VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *, char * ) ); VLC_EXPORT( int, playlist_ItemSetDuration, (playlist_item_t *, mtime_t ) ); @@ -248,10 +281,10 @@ VLC_EXPORT( int, playlist_ItemSetDuration, (playlist_item_t *, mtime_t ) ); /* View management functions */ VLC_EXPORT( int, playlist_ViewInsert, (playlist_t *, int, char * ) ); -VLC_EXPORT( void, playlist_ViewDelete, (playlist_t *,playlist_view_t* ) ); +VLC_EXPORT( int, playlist_ViewDelete, (playlist_t *,playlist_view_t* ) ); VLC_EXPORT( playlist_view_t *, playlist_ViewFind, (playlist_t *, int ) ); VLC_EXPORT( int, playlist_ViewUpdate, (playlist_t *, int ) ); -VLC_EXPORT( void, playlist_ViewDump, (playlist_t *, playlist_view_t * ) ); +VLC_EXPORT( int, playlist_ViewDump, (playlist_t *, playlist_view_t * ) ); VLC_EXPORT( int, playlist_ViewEmpty, (playlist_t *, int, vlc_bool_t ) ); /* Node management */ @@ -261,10 +294,9 @@ VLC_EXPORT( int, playlist_NodeInsert, (playlist_t *,int,playlist_item_t*,playlis VLC_EXPORT( int, playlist_NodeRemoveItem, (playlist_t *,playlist_item_t*,playlist_item_t *) ); VLC_EXPORT( int, playlist_NodeChildrenCount, (playlist_t *,playlist_item_t* ) ); VLC_EXPORT( playlist_item_t *, playlist_ChildSearchName, (playlist_item_t*, const char* ) ); -VLC_EXPORT( int, playlist_NodeDelete, ( playlist_t *, playlist_item_t *, vlc_bool_t ) ); +VLC_EXPORT( int, playlist_NodeDelete, ( playlist_t *, playlist_item_t *, vlc_bool_t , vlc_bool_t ) ); VLC_EXPORT( int, playlist_NodeEmpty, ( playlist_t *, playlist_item_t *, vlc_bool_t ) ); - /* Tree walking */ playlist_item_t *playlist_FindNextFromParent( playlist_t *p_playlist, int i_view, @@ -287,26 +319,24 @@ VLC_EXPORT(int, playlist_NodeAddItem, ( playlist_t *, playlist_item_t *,int,play /* Misc item operations (act on item+playlist) */ VLC_EXPORT( int, playlist_Delete, ( playlist_t *, int ) ); +VLC_EXPORT( int, playlist_LockDelete, ( playlist_t *, int ) ); VLC_EXPORT( int, playlist_Disable, ( playlist_t *, playlist_item_t * ) ); VLC_EXPORT( int, playlist_Enable, ( playlist_t *, playlist_item_t * ) ); -VLC_EXPORT( void, playlist_ItemToNode, (playlist_t *,playlist_item_t *) ); +VLC_EXPORT( int, playlist_ItemToNode, (playlist_t *,playlist_item_t *) ); +VLC_EXPORT( int, playlist_LockItemToNode, (playlist_t *,playlist_item_t *) ); +VLC_EXPORT( int, playlist_Replace, (playlist_t *,playlist_item_t *, input_item_t*) ); +VLC_EXPORT( int, playlist_LockReplace, (playlist_t *,playlist_item_t *, input_item_t*) ); /* Item search functions */ VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int) ); +VLC_EXPORT( playlist_item_t *, playlist_LockItemGetById, (playlist_t *, int) ); VLC_EXPORT( playlist_item_t *, playlist_ItemGetByPos, (playlist_t *, int) ); +VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByPos, (playlist_t *, int) ); +VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t * ) ); +VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) ); VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) ); -/* Info functions */ -VLC_EXPORT( char * , playlist_GetInfo, ( playlist_t * , int, const char *, const char *) ); -VLC_EXPORT( char * , playlist_ItemGetInfo, ( playlist_item_t * , const char *, const char *) ); - -VLC_EXPORT( info_category_t*, playlist_ItemGetCategory, ( playlist_item_t *, const char *) ); - -VLC_EXPORT( info_category_t*, playlist_ItemCreateCategory, ( playlist_item_t *, const char *) ); - -VLC_EXPORT( int, playlist_AddInfo, (playlist_t *, int, const char * , const char *, const char *, ...) ); -VLC_EXPORT( int, playlist_ItemAddInfo, (playlist_item_t *, const char * , const char *, const char *, ...) ); VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) ); /* Playlist sorting */ @@ -317,6 +347,8 @@ VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) ); VLC_EXPORT( int, playlist_Sort, ( playlist_t *, int, int) ); VLC_EXPORT( int, playlist_Move, ( playlist_t *, int, int ) ); VLC_EXPORT( int, playlist_NodeGroup, ( playlist_t *, int,playlist_item_t *,playlist_item_t **,int, int, int ) ); +VLC_EXPORT( int, playlist_NodeSort, ( playlist_t *, playlist_item_t *,int, int ) ); +VLC_EXPORT( int, playlist_RecursiveNodeSort, ( playlist_t *, playlist_item_t *,int, int ) ); /* Load/Save */ VLC_EXPORT( int, playlist_Import, ( playlist_t *, const char * ) ); @@ -359,6 +391,8 @@ static inline vlc_bool_t playlist_IsEmpty( playlist_t * p_playlist ) return( b_empty ); } + + /** * @} */