]> git.sesse.net Git - vlc/commitdiff
control/media_list.c: Send WillAddItem and WillDeleteItem events.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 20 Nov 2007 14:57:06 +0000 (14:57 +0000)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 20 Nov 2007 14:57:06 +0000 (14:57 +0000)
include/vlc/libvlc_structures.h
src/control/media_list.c

index d52ddc05188fb9c320816b0ef6210375e6e971ce..24698bd5e851c4e6f773dd0f659d5f90080f6813 100644 (file)
@@ -306,7 +306,9 @@ typedef enum libvlc_event_type_t {
     libvlc_MediaInstancePositionChanged,
 
     libvlc_MediaListItemAdded,
+    libvlc_MediaListWillAddItem,
     libvlc_MediaListItemDeleted,
+    libvlc_MediaListWillDeleteItem,
 
     libvlc_MediaListPlayerPlayed,
     libvlc_MediaListPlayerNextItemSet,
@@ -362,10 +364,20 @@ typedef struct libvlc_event_t
             int index;
         } media_list_item_added;
         struct
+        {
+            libvlc_media_descriptor_t * item;
+            int index;
+        } media_list_will_add_item;
+        struct
         {
             libvlc_media_descriptor_t * item;
             int index;
         } media_list_item_deleted;
+        struct
+        {
+            libvlc_media_descriptor_t * item;
+            int index;
+        } media_list_will_delete_item;
     } u;
 } libvlc_event_t;
 
index 8463fb18f07167724fad7d4a9f83d82bd98619f4..09b635040086fa6d5f7c80ff7cfa511eaf78d9b3 100644 (file)
 #include <assert.h>
 #include "vlc_arrays.h"
 
+typedef enum EventPlaceInTime {
+    EventWillHappen,
+    EventDidHappen
+} EventPlaceInTime;
+
 /*
  * Private functions
  */
 static void
 notify_item_addition( libvlc_media_list_t * p_mlist,
                       libvlc_media_descriptor_t * p_md,
-                      int index )
+                      int index,
+                      EventPlaceInTime event_status )
 {
     libvlc_event_t event;
 
     /* Construct the event */
-    event.type = libvlc_MediaListItemAdded;
-    event.u.media_list_item_added.item = p_md;
-    event.u.media_list_item_added.index = index;
+    if( event_status == EventDidHappen )
+    {
+        event.type = libvlc_MediaListItemAdded;
+        event.u.media_list_item_added.item = p_md;
+        event.u.media_list_item_added.index = index;
+    }
+    else /* if( event_status == EventWillHappen ) */
+    {
+        event.type = libvlc_MediaListWillAddItem;
+        event.u.media_list_will_add_item.item = p_md;
+        event.u.media_list_will_add_item.index = index;
+    }
 
     /* Send the event */
     libvlc_event_send( p_mlist->p_event_manager, &event );
@@ -61,14 +76,24 @@ 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,
-                      int index )
+                      int index,
+                      EventPlaceInTime event_status )
 {
     libvlc_event_t event;
 
     /* Construct the event */
-    event.type = libvlc_MediaListItemDeleted;
-    event.u.media_list_item_deleted.item = p_md;
-    event.u.media_list_item_deleted.index = index;
+    if( event_status == EventDidHappen )
+    {
+        event.type = libvlc_MediaListItemDeleted;
+        event.u.media_list_item_deleted.item = p_md;
+        event.u.media_list_item_deleted.index = index;
+    }
+    else /* if( event_status == EventWillHappen ) */
+    {
+        event.type = libvlc_MediaListWillDeleteItem;
+        event.u.media_list_will_delete_item.item = p_md;
+        event.u.media_list_will_delete_item.index = index;
+    }
 
     /* Send the event */
     libvlc_event_send( p_mlist->p_event_manager, &event );
@@ -277,8 +302,10 @@ void libvlc_media_list_add_media_descriptor(
 {
     (void)p_e;
     libvlc_media_descriptor_retain( p_md );
+
+    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 );
+    notify_item_addition( p_mlist, p_md, vlc_array_count( &p_mlist->items )-1, EventDidHappen );
 }
 
 /**************************************************************************
@@ -295,8 +322,9 @@ void libvlc_media_list_insert_media_descriptor(
     (void)p_e;
     libvlc_media_descriptor_retain( p_md );
 
+    notify_item_addition( p_mlist, p_md, index, EventWillHappen );
     vlc_array_insert( &p_mlist->items, p_md, index );
-    notify_item_addition( p_mlist, p_md, index );
+    notify_item_addition( p_mlist, p_md, index, EventDidHappen );
 }
 
 /**************************************************************************
@@ -312,8 +340,9 @@ void libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist,
 
     p_md = vlc_array_item_at_index( &p_mlist->items, index );
 
+    notify_item_deletion( p_mlist, p_md, index, EventWillHappen );
     vlc_array_remove( &p_mlist->items, index );
-    notify_item_deletion( p_mlist, p_md, index );
+    notify_item_deletion( p_mlist, p_md, index, EventDidHappen );
 
     libvlc_media_descriptor_release( p_md );
 }