#include <vlc_input.h>
#include <vlc_events.h>
-#include <vlc_services_discovery.h>
-#include <stdio.h>
-#include <stdlib.h>
TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t);
playlist_item_array_t current; /**< Items currently being played */
int i_current_index; /**< Index in current array */
- /** Reset current item array */
- bool b_reset_currently_playing;
- mtime_t last_rebuild_date;
-
- int i_last_playlist_id; /**< Last id to an item */
/* Predefined items */
playlist_item_t * p_root_category; /**< Root of category tree */
playlist_item_t * p_ml_category; /** < "Library" in CATEGORY view */
playlist_item_t * p_local_onelevel; /** < "Playlist" in ONELEVEL view */
playlist_item_t * p_ml_onelevel; /** < "Library" in ONELEVEL view */
-
- bool b_doing_ml; /**< Doing media library stuff,
- * get quicker */
- bool b_auto_preparse;
-
- /* Runtime */
- int i_sort; /**< Last sorting applied to the playlist */
- int i_order; /**< Last ordering applied to the playlist */
- mtime_t gc_date;
- bool b_cant_sleep;
-
};
/** Helper to add an item */
int i_position;
};
-#define SORT_ID 0
-#define SORT_TITLE 1
-#define SORT_TITLE_NODES_FIRST 2
-#define SORT_ARTIST 3
-#define SORT_GENRE 4
-#define SORT_RANDOM 5
-#define SORT_DURATION 6
-#define SORT_TITLE_NUMERIC 7
-#define SORT_ALBUM 8
-#define SORT_TRACK_NUMBER 9
-#define SORT_DESCRIPTION 10
-#define SORT_RATING 11
-#define SORT_URI 12
-
-#define ORDER_NORMAL 0
-#define ORDER_REVERSE 1
+enum
+{
+ SORT_ID = 0,
+ SORT_TITLE = 1,
+ SORT_TITLE_NODES_FIRST = 2,
+ SORT_ARTIST = 3,
+ SORT_GENRE = 4,
+ SORT_RANDOM = 5,
+ SORT_DURATION = 6,
+ SORT_TITLE_NUMERIC = 7,
+ SORT_ALBUM = 8,
+ SORT_TRACK_NUMBER = 9,
+ SORT_DESCRIPTION = 10,
+ SORT_RATING = 11,
+ SORT_URI = 12,
+};
+enum
+{
+ ORDER_NORMAL = 0,
+ ORDER_REVERSE = 1,
+};
/* Used by playlist_Import */
#define PLAYLIST_INSERT 0x0001
/* Helpers */
#define PL_LOCK vlc_object_lock( p_playlist )
#define PL_UNLOCK vlc_object_unlock( p_playlist )
+#define PL_ASSERT_LOCKED vlc_object_assert_locked( p_playlist )
VLC_EXPORT( playlist_t *, __pl_Hold, ( vlc_object_t * ) );
#define pl_Hold( a ) __pl_Hold( VLC_OBJECT(a) )
#define playlist_Stop(p) playlist_Control(p,PLAYLIST_STOP, pl_Unlocked )
#define playlist_Next(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, 1)
#define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, -1)
-#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, i)
+#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, (i) )
/**
* Do a playlist action.
VLC_EXPORT( void, playlist_Clear, ( playlist_t *, bool ) );
/** Enqueue an input item for preparsing */
-VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) );
+VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *, bool b_locked ) );
-/** Enqueue a playlist item and all of its children if any for preparsing */
-VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) );
/** Request the art for an input item to be fetched */
-VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *) );
+VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *, bool b_locked ) );
/* Playlist sorting */
VLC_EXPORT( int, playlist_TreeMove, ( playlist_t *, playlist_item_t *, playlist_item_t *, int ) );
VLC_EXPORT( int, playlist_RecursiveNodeSort, ( playlist_t *, playlist_item_t *,int, int ) );
-VLC_EXPORT( playlist_item_t *, playlist_CurrentPlayingItem, ( playlist_t * ) );
VLC_EXPORT( int, playlist_CurrentId, ( playlist_t * ) );
+VLC_EXPORT( playlist_item_t *, playlist_CurrentPlayingItem, ( playlist_t * ) );
VLC_EXPORT( bool, playlist_IsPlaying, ( playlist_t * ) );
VLC_EXPORT( int, playlist_Status, ( playlist_t * ) );
*/
VLC_EXPORT( int, playlist_Export, ( playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type ) );
+/**
+ * Open a playlist file, add its content to the current playlist
+ */
+VLC_EXPORT( int, playlist_Import, ( playlist_t *p_playlist, const char *psz_file ) );
+
/********************** Services discovery ***********************/
/** Add a list of comma-separated service discovery modules */
/*************************** Item deletion **************************/
VLC_EXPORT( int, playlist_DeleteFromInput, ( playlist_t *, int, bool ) );
-/*************************** Item fields accessors **************************/
-VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *, const char * ) );
-
/******************** Item addition ********************/
VLC_EXPORT( int, playlist_Add, ( playlist_t *, const char *, const char *, int, int, bool, bool ) );
VLC_EXPORT( int, playlist_AddExt, ( playlist_t *, const char *, const char *, int, int, mtime_t, const char *const *,int, bool, bool ) );
/***********************************************************************
* Inline functions
***********************************************************************/
-/** Open a playlist file, add its content to the current playlist */
-static inline int playlist_Import( playlist_t *p_playlist, const char *psz_file)
-{
- char psz_uri[256+10];
- input_item_t *p_input;
- snprintf( psz_uri, 256+9, "file/://%s", psz_file );
- const char *const psz_option = "meta-file";
- p_input = input_item_NewExt( p_playlist, psz_uri, psz_file,
- 1, &psz_option, -1 );
- playlist_AddInput( p_playlist, p_input, PLAYLIST_APPEND, PLAYLIST_END,
- true, false );
- input_Read( p_playlist, p_input, true );
- return VLC_SUCCESS;
-}
-
/** Small helper tp get current playing input or NULL. Release the input after use. */
#define pl_CurrentInput(a) __pl_CurrentInput( VLC_OBJECT(a) )
static inline input_thread_t * __pl_CurrentInput( vlc_object_t * p_this )
}
/** Tell if the playlist is empty */
-#define playlist_IsEmpty( pl ) ( pl->items.i_size == 0 )
+static inline bool playlist_IsEmpty( playlist_t *p_playlist )
+{
+ PL_ASSERT_LOCKED;
+ return p_playlist->items.i_size == 0;
+}
/** Tell the number of items in the current playing context */
-#define playlist_CurrentSize( pl ) pl->current.i_size
-
-/** Ask the playlist to do some work */
-#define playlist_Signal( p_playlist ) vlc_object_signal( p_playlist )
+static inline int playlist_CurrentSize( playlist_t *p_playlist )
+{
+ PL_ASSERT_LOCKED;
+ return p_playlist->current.i_size;
+}
/** @} */
# ifdef __cplusplus