]> git.sesse.net Git - vlc/blobdiff - src/control/media_list.c
Split out r/o test into a static inline...
[vlc] / src / control / media_list.c
index ae5a72aa108689d2f3263a497bd02d7e892341ee..eb1b1768e33eb11f1b9ee83aa3e77fff9e1ea560 100644 (file)
@@ -52,7 +52,7 @@ typedef enum EventPlaceInTime {
  **************************************************************************/
 static void
 notify_item_addition( libvlc_media_list_t * p_mlist,
-                      libvlc_media_descriptor_t * p_md,
+                      libvlc_media_t * p_md,
                       int index,
                       EventPlaceInTime event_status )
 {
@@ -84,7 +84,7 @@ notify_item_addition( libvlc_media_list_t * p_mlist,
  **************************************************************************/
 static void
 notify_item_deletion( libvlc_media_list_t * p_mlist,
-                      libvlc_media_descriptor_t * p_md,
+                      libvlc_media_t * p_md,
                       int index,
                       EventPlaceInTime event_status )
 {
@@ -109,6 +109,24 @@ notify_item_deletion( libvlc_media_list_t * p_mlist,
     libvlc_event_send( p_mlist->p_event_manager, &event );
 }
 
+/**************************************************************************
+ *       static mlist_is_writable (private)
+ *
+ * Raise exception and return 0 when the media_list instance is read-only,
+ * or else return 1.
+ **************************************************************************/
+static inline
+int mlist_is_writable( libvlc_media_list_t *p_mlist, libvlc_exception_t *p_e )
+{
+    if( !p_mlist||p_mlist->b_read_only )
+    {
+        /* We are read-only from user side */
+        libvlc_exception_raise( p_e, "Cannot write to read-only media list." );
+        return 0;
+    }
+    return 1;
+}
+
 /*
  * Public libvlc functions
  */
@@ -125,16 +143,15 @@ libvlc_media_list_new( libvlc_instance_t * p_inst,
     libvlc_media_list_t * p_mlist;
 
     p_mlist = malloc(sizeof(libvlc_media_list_t));
-
     if( !p_mlist )
         return NULL;
+
     p_mlist->p_libvlc_instance = p_inst;
     p_mlist->p_event_manager = libvlc_event_manager_new( p_mlist, p_inst, p_e );
 
     /* Code for that one should be handled in flat_media_list.c */
     p_mlist->p_flat_mlist = NULL;
-    p_mlist->b_read_only = VLC_FALSE;
+    p_mlist->b_read_only = false;
 
     libvlc_event_manager_register_event_type( p_mlist->p_event_manager,
             libvlc_MediaListItemAdded, p_e );
@@ -152,8 +169,8 @@ libvlc_media_list_new( libvlc_instance_t * p_inst,
         return NULL;
     }
 
-    vlc_mutex_init( p_inst->p_libvlc_int, &p_mlist->object_lock );
+    vlc_mutex_init( &p_mlist->object_lock );
+
     vlc_array_init( &p_mlist->items );
     p_mlist->i_refcount = 1;
     p_mlist->p_md = NULL;
@@ -168,7 +185,7 @@ libvlc_media_list_new( libvlc_instance_t * p_inst,
  **************************************************************************/
 void libvlc_media_list_release( libvlc_media_list_t * p_mlist )
 {
-    libvlc_media_descriptor_t * p_md;
+    libvlc_media_t * p_md;
     int i;
 
     vlc_mutex_lock( &p_mlist->object_lock );
@@ -185,12 +202,12 @@ void libvlc_media_list_release( libvlc_media_list_t * p_mlist )
     libvlc_event_manager_release( p_mlist->p_event_manager );
 
     if( p_mlist->p_md )
-        libvlc_media_descriptor_release( p_mlist->p_md );
+        libvlc_media_release( p_mlist->p_md );
 
     for ( i = 0; i < vlc_array_count( &p_mlist->items ); i++ )
     {
         p_md = vlc_array_item_at_index( &p_mlist->items, i );
-        libvlc_media_descriptor_release( p_md );
+        libvlc_media_release( p_md );
     }
 
     vlc_mutex_destroy( &p_mlist->object_lock );
@@ -221,10 +238,11 @@ libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist,
                                     libvlc_exception_t * p_e )
 {
     input_item_t * p_input_item;
-    libvlc_media_descriptor_t * p_md;
+    libvlc_media_t * p_md;
 
-    p_input_item = input_ItemNewExt( p_mlist->p_libvlc_instance->p_libvlc_int, psz_uri,
-                                _("Media Library"), 0, NULL, -1 );
+    p_input_item = input_item_NewExt(
+                           p_mlist->p_libvlc_instance->p_libvlc_int, psz_uri,
+                                         _("Media Library"), 0, NULL, 0, -1 );
 
     if( !p_input_item )
     {
@@ -232,7 +250,7 @@ libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist,
         return;
     }
 
-    p_md = libvlc_media_descriptor_new_from_input_item(
+    p_md = libvlc_media_new_from_input_item(
             p_mlist->p_libvlc_instance,
             p_input_item, p_e );
 
@@ -242,52 +260,52 @@ libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist,
         return;
     }
 
-    libvlc_media_list_add_media_descriptor( p_mlist, p_md, p_e );
+    libvlc_media_list_add_media( p_mlist, p_md, p_e );
     if( libvlc_exception_raised( p_e ) )
         return;
 
-    input_Read( p_mlist->p_libvlc_instance->p_libvlc_int, p_input_item, VLC_TRUE );
+    input_Read( p_mlist->p_libvlc_instance->p_libvlc_int, p_input_item, true );
 
     return;
 }
 
 /**************************************************************************
- *       set_media_descriptor (Public)
+ *       set_media (Public)
  **************************************************************************/
-void libvlc_media_list_set_media_descriptor( libvlc_media_list_t * p_mlist,
-                                             libvlc_media_descriptor_t * p_md,
+void libvlc_media_list_set_media( libvlc_media_list_t * p_mlist,
+                                             libvlc_media_t * p_md,
                                              libvlc_exception_t * p_e)
 
 {
-    (void)p_e;
+    VLC_UNUSED(p_e);
     vlc_mutex_lock( &p_mlist->object_lock );
     if( p_mlist->p_md )
-        libvlc_media_descriptor_release( p_mlist->p_md );
-    libvlc_media_descriptor_retain( p_md );
+        libvlc_media_release( p_mlist->p_md );
+    libvlc_media_retain( p_md );
     p_mlist->p_md = p_md;
     vlc_mutex_unlock( &p_mlist->object_lock );
 }
 
 /**************************************************************************
- *       media_descriptor (Public)
+ *       media (Public)
  *
- * If this media_list comes is a media_descriptor's subitems,
- * This holds the corresponding media_descriptor.
+ * If this media_list comes is a media's subitems,
+ * This holds the corresponding media.
  * This md is also seen as the information holder for the media_list.
  * Indeed a media_list can have meta information through this
- * media_descriptor.
+ * media.
  **************************************************************************/
-libvlc_media_descriptor_t *
-libvlc_media_list_media_descriptor( libvlc_media_list_t * p_mlist,
+libvlc_media_t *
+libvlc_media_list_media( libvlc_media_list_t * p_mlist,
                                     libvlc_exception_t * p_e)
 {
-    libvlc_media_descriptor_t *p_md;
-    (void)p_e;
+    libvlc_media_t *p_md;
+    VLC_UNUSED(p_e);
 
     vlc_mutex_lock( &p_mlist->object_lock );
     p_md = p_mlist->p_md;
     if( p_md )
-        libvlc_media_descriptor_retain( p_md );
+        libvlc_media_retain( p_md );
     vlc_mutex_unlock( &p_mlist->object_lock );
 
     return p_md;
@@ -301,73 +319,64 @@ libvlc_media_list_media_descriptor( libvlc_media_list_t * p_mlist,
 int libvlc_media_list_count( libvlc_media_list_t * p_mlist,
                              libvlc_exception_t * p_e )
 {
-    (void)p_e;
+    VLC_UNUSED(p_e);
     return vlc_array_count( &p_mlist->items );
 }
 
 /**************************************************************************
- *       libvlc_media_list_add_media_descriptor (Public)
+ *       libvlc_media_list_add_media (Public)
  *
- * Lock should be hold when entering.
+ * Lock should be held when entering.
  **************************************************************************/
-void libvlc_media_list_add_media_descriptor(
+void libvlc_media_list_add_media(
                                    libvlc_media_list_t * p_mlist,
-                                   libvlc_media_descriptor_t * p_md,
+                                   libvlc_media_t * p_md,
                                    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_add_media_descriptor( p_mlist, p_md, p_e );
+    if( mlist_is_writable(p_mlist,p_e) )
+        _libvlc_media_list_add_media( p_mlist, p_md, p_e );
 }
 
 /* LibVLC internal version */
-void _libvlc_media_list_add_media_descriptor(
+void _libvlc_media_list_add_media(
                                    libvlc_media_list_t * p_mlist,
-                                   libvlc_media_descriptor_t * p_md,
+                                   libvlc_media_t * p_md,
                                    libvlc_exception_t * p_e )
 {
     (void)p_e;
-    libvlc_media_descriptor_retain( p_md );
+    libvlc_media_retain( p_md );
 
-    notify_item_addition( p_mlist, p_md, vlc_array_count( &p_mlist->items ), EventWillHappen );
+    notify_item_addition( p_mlist, p_md, vlc_array_count( &p_mlist->items ),
+                          EventWillHappen );
     vlc_array_append( &p_mlist->items, p_md );
-    notify_item_addition( p_mlist, p_md, vlc_array_count( &p_mlist->items )-1, EventDidHappen );
+    notify_item_addition( p_mlist, p_md, vlc_array_count( &p_mlist->items )-1,
+                          EventDidHappen );
 }
 
 /**************************************************************************
- *       libvlc_media_list_insert_media_descriptor (Public)
+ *       libvlc_media_list_insert_media (Public)
  *
  * Lock should be hold when entering.
  **************************************************************************/
-void libvlc_media_list_insert_media_descriptor(
+void libvlc_media_list_insert_media(
                                    libvlc_media_list_t * p_mlist,
-                                   libvlc_media_descriptor_t * p_md,
+                                   libvlc_media_t * p_md,
                                    int index,
                                    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 );
+    if( mlist_is_writable(p_mlist,p_e) )
+        _libvlc_media_list_insert_media( p_mlist, p_md, index, p_e );
 }
 
 /* LibVLC internal version */
-void _libvlc_media_list_insert_media_descriptor(
+void _libvlc_media_list_insert_media(
                                    libvlc_media_list_t * p_mlist,
-                                   libvlc_media_descriptor_t * p_md,
+                                   libvlc_media_t * p_md,
                                    int index,
                                    libvlc_exception_t * p_e )
 {
     (void)p_e;
-    libvlc_media_descriptor_retain( p_md );
+    libvlc_media_retain( p_md );
 
     notify_item_addition( p_mlist, p_md, index, EventWillHappen );
     vlc_array_insert( &p_mlist->items, p_md, index );
@@ -377,19 +386,14 @@ void _libvlc_media_list_insert_media_descriptor(
 /**************************************************************************
  *       libvlc_media_list_remove_index (Public)
  *
- * Lock should be hold when entering.
+ * Lock should be held when entering.
  **************************************************************************/
 void libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist,
                                      int index,
                                      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 );
+    if( mlist_is_writable(p_mlist,p_e) )
+        _libvlc_media_list_remove_index( p_mlist, index, p_e );
 }
 
 /* LibVLC internal version */
@@ -397,9 +401,13 @@ void _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist,
                                      int index,
                                      libvlc_exception_t * p_e )
 {
-    VLC_UNUSED(p_e);
+    libvlc_media_t * p_md;
 
-    libvlc_media_descriptor_t * p_md;
+    if( index < 0 || index >= vlc_array_count( &p_mlist->items ))
+    {
+        libvlc_exception_raise( p_e, "Index out of bounds");
+        return;
+    }
 
     p_md = vlc_array_item_at_index( &p_mlist->items, index );
 
@@ -407,40 +415,45 @@ void _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist,
     vlc_array_remove( &p_mlist->items, index );
     notify_item_deletion( p_mlist, p_md, index, EventDidHappen );
 
-    libvlc_media_descriptor_release( p_md );
+    libvlc_media_release( p_md );
 }
 
 /**************************************************************************
  *       libvlc_media_list_item_at_index (Public)
  *
- * Lock should be hold when entering.
+ * Lock should be held when entering.
  **************************************************************************/
-libvlc_media_descriptor_t *
+libvlc_media_t *
 libvlc_media_list_item_at_index( libvlc_media_list_t * p_mlist,
                                  int index,
                                  libvlc_exception_t * p_e )
 {
-    VLC_UNUSED(p_e);
+    libvlc_media_t * p_md;
+
+    if( index < 0 || index >= vlc_array_count( &p_mlist->items ))
+    {
+        libvlc_exception_raise( p_e, "Index out of bounds");
+        return NULL;
+    }
 
-    libvlc_media_descriptor_t * p_md;
     p_md = vlc_array_item_at_index( &p_mlist->items, index );
-    libvlc_media_descriptor_retain( p_md );
+    libvlc_media_retain( p_md );
     return p_md;
 }
 
 /**************************************************************************
  *       libvlc_media_list_index_of_item (Public)
  *
- * Lock should be hold when entering.
- * Warning: this function would return the first matching item
+ * Lock should be held when entering.
+ * Warning: this function returns the first matching item.
  **************************************************************************/
 int libvlc_media_list_index_of_item( libvlc_media_list_t * p_mlist,
-                                     libvlc_media_descriptor_t * p_searched_md,
+                                     libvlc_media_t * p_searched_md,
                                      libvlc_exception_t * p_e )
 {
     VLC_UNUSED(p_e);
 
-    libvlc_media_descriptor_t * p_md;
+    libvlc_media_t * p_md;
     int i;
     for ( i = 0; i < vlc_array_count( &p_mlist->items ); i++ )
     {
@@ -456,7 +469,7 @@ int libvlc_media_list_index_of_item( libvlc_media_list_t * p_mlist,
  *
  * 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 )
+int libvlc_media_list_is_readonly( libvlc_media_list_t * p_mlist )
 {
     return p_mlist->b_read_only;
 }
@@ -493,6 +506,6 @@ libvlc_event_manager_t *
 libvlc_media_list_event_manager( libvlc_media_list_t * p_mlist,
                                     libvlc_exception_t * p_e )
 {
-    (void)p_e;
+    VLC_UNUSED(p_e);
     return p_mlist->p_event_manager;
 }