Commit c7e71cb6 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

control/media_list.c: Implement read-only media_list.

parent ee9c15aa
...@@ -546,6 +546,10 @@ VLC_PUBLIC_API int ...@@ -546,6 +546,10 @@ VLC_PUBLIC_API int
libvlc_media_descriptor_t *, libvlc_media_descriptor_t *,
libvlc_exception_t * ); libvlc_exception_t * );
/* This indicates if this media list is read-only from a user point of view */
VLC_PUBLIC_API vlc_bool_t
libvlc_media_list_is_readonly( libvlc_media_list_t * p_mlist );
VLC_PUBLIC_API void VLC_PUBLIC_API void
libvlc_media_list_lock( libvlc_media_list_t * ); libvlc_media_list_lock( libvlc_media_list_t * );
VLC_PUBLIC_API void VLC_PUBLIC_API void
......
...@@ -114,6 +114,10 @@ struct libvlc_media_list_t ...@@ -114,6 +114,10 @@ struct libvlc_media_list_t
/* Other way to see that media list */ /* Other way to see that media list */
/* Used in flat_media_list.c */ /* Used in flat_media_list.c */
libvlc_media_list_t * p_flat_mlist; libvlc_media_list_t * p_flat_mlist;
/* This indicates if this media list is read-only
* from a user point of view */
vlc_bool_t b_read_only;
}; };
typedef void (*libvlc_media_list_view_release_func_t)( libvlc_media_list_view_t * p_mlv ) ; typedef void (*libvlc_media_list_view_release_func_t)( libvlc_media_list_view_t * p_mlv ) ;
...@@ -297,6 +301,18 @@ VLC_EXPORT (libvlc_media_descriptor_t *, libvlc_media_descriptor_duplicate, ...@@ -297,6 +301,18 @@ VLC_EXPORT (libvlc_media_descriptor_t *, libvlc_media_descriptor_duplicate,
VLC_EXPORT (void, libvlc_media_descriptor_set_state, VLC_EXPORT (void, libvlc_media_descriptor_set_state,
( libvlc_media_descriptor_t *, libvlc_state_t, libvlc_exception_t * ) ); ( libvlc_media_descriptor_t *, libvlc_state_t, libvlc_exception_t * ) );
/* Media List */
VLC_EXPORT ( void, _libvlc_media_list_insert_media_descriptor,
( libvlc_media_list_t * p_mlist,
libvlc_media_descriptor_t * p_md,
int index,
libvlc_exception_t * p_e ) );
VLC_EXPORT ( void, _libvlc_media_list_remove_index,
( libvlc_media_list_t * p_mlist,
int index,
libvlc_exception_t * p_e ) );
/* Media List View */ /* Media List View */
VLC_EXPORT ( libvlc_media_list_view_t *, libvlc_media_list_view_new, VLC_EXPORT ( libvlc_media_list_view_t *, libvlc_media_list_view_new,
( libvlc_media_list_t * p_mlist, ( libvlc_media_list_t * p_mlist,
......
...@@ -124,6 +124,7 @@ libvlc_media_list_new( libvlc_instance_t * p_inst, ...@@ -124,6 +124,7 @@ libvlc_media_list_new( libvlc_instance_t * p_inst,
/* Code for that one should be handled in flat_media_list.c */ /* Code for that one should be handled in flat_media_list.c */
p_mlist->p_flat_mlist = NULL; p_mlist->p_flat_mlist = NULL;
p_mlist->b_read_only = VLC_FALSE;
libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_event_manager_register_event_type( p_mlist->p_event_manager,
libvlc_MediaListItemAdded, p_e ); libvlc_MediaListItemAdded, p_e );
...@@ -322,6 +323,22 @@ void libvlc_media_list_insert_media_descriptor( ...@@ -322,6 +323,22 @@ void libvlc_media_list_insert_media_descriptor(
libvlc_media_descriptor_t * p_md, libvlc_media_descriptor_t * p_md,
int index, int index,
libvlc_exception_t * p_e ) libvlc_exception_t * p_e )
{
if( p_mlist->b_read_only )
{
/* We are read only from user side */
libvlc_exception_raise( p_e, "Trying to write into a read-only media list." );
return;
}
_libvlc_media_list_insert_media_descriptor( p_mlist, p_md, index, p_e );
}
/* LibVLC internal version */
void _libvlc_media_list_insert_media_descriptor(
libvlc_media_list_t * p_mlist,
libvlc_media_descriptor_t * p_md,
int index,
libvlc_exception_t * p_e )
{ {
(void)p_e; (void)p_e;
libvlc_media_descriptor_retain( p_md ); libvlc_media_descriptor_retain( p_md );
...@@ -339,6 +356,20 @@ void libvlc_media_list_insert_media_descriptor( ...@@ -339,6 +356,20 @@ void libvlc_media_list_insert_media_descriptor(
void libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, void libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist,
int index, int index,
libvlc_exception_t * p_e ) libvlc_exception_t * p_e )
{
if( p_mlist->b_read_only )
{
/* We are read only from user side */
libvlc_exception_raise( p_e, "Trying to write into a read-only media list." );
return;
}
_libvlc_media_list_remove_index( p_mlist, index, p_e );
}
/* LibVLC internal version */
void _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist,
int index,
libvlc_exception_t * p_e )
{ {
libvlc_media_descriptor_t * p_md; libvlc_media_descriptor_t * p_md;
...@@ -388,6 +419,16 @@ int libvlc_media_list_index_of_item( libvlc_media_list_t * p_mlist, ...@@ -388,6 +419,16 @@ int libvlc_media_list_index_of_item( libvlc_media_list_t * p_mlist,
return -1; return -1;
} }
/**************************************************************************
* libvlc_media_list_is_readonly (Public)
*
* This indicates if this media list is read-only from a user point of view
**************************************************************************/
vlc_bool_t libvlc_media_list_is_readonly( libvlc_media_list_t * p_mlist )
{
return p_mlist->b_read_only;
}
/************************************************************************** /**************************************************************************
* libvlc_media_list_lock (Public) * libvlc_media_list_lock (Public)
* *
...@@ -411,7 +452,6 @@ void libvlc_media_list_unlock( libvlc_media_list_t * p_mlist ) ...@@ -411,7 +452,6 @@ void libvlc_media_list_unlock( libvlc_media_list_t * p_mlist )
} }
/************************************************************************** /**************************************************************************
* libvlc_media_list_p_event_manager (Public) * libvlc_media_list_p_event_manager (Public)
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment