control/media_descriptor.c: Forward vlc_InputItemSubItemAdded event.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Thu, 16 Aug 2007 18:05:07 +0000 (18:05 +0000)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Thu, 16 Aug 2007 18:05:07 +0000 (18:05 +0000)
include/vlc/libvlc_structures.h
src/control/media_descriptor.c

index 13d7eac..ad2b6a3 100644 (file)
@@ -242,6 +242,7 @@ typedef struct libvlc_log_message_t
 
 typedef enum libvlc_event_type_t {
     libvlc_MediaDescriptorMetaChanged,
+    libvlc_MediaDescriptorSubItemAdded,
     libvlc_MediaInstanceReachedEnd,
     libvlc_MediaListItemAdded,
     libvlc_MediaListItemDeleted,
@@ -266,6 +267,10 @@ typedef struct libvlc_event_t
             libvlc_meta_t meta_type;
         } media_descriptor_meta_changed;
         struct
+        {
+            libvlc_media_descriptor_t * new_child;
+        } media_descriptor_subitem_added;
+        struct
         {
             libvlc_media_descriptor_t * item;
             int index;
index 942697e..02f58ac 100644 (file)
@@ -69,6 +69,29 @@ static const libvlc_meta_t vlc_to_libvlc_meta[] =
     [vlc_meta_TrackID]      = libvlc_meta_TrackID
 };
 
+/**************************************************************************
+ * input_item_subitem_added (Private) (vlc event Callback)
+ **************************************************************************/
+static void input_item_subitem_added( const vlc_event_t *p_event,
+                                     void * user_data )
+{
+    libvlc_media_descriptor_t * p_md = user_data;
+    libvlc_media_descriptor_t * p_md_child;
+    libvlc_event_t event;
+
+    p_md_child = libvlc_media_descriptor_new_from_input_item(
+                p_md->p_libvlc_instance, 
+                p_event->u.input_item_subitem_added.p_new_child, NULL );
+
+    /* Construct the event */
+    event.type = libvlc_MediaDescriptorSubItemAdded;
+    event.u.media_descriptor_subitem_added.new_child = p_md_child;
+
+    /* Send the event */
+    libvlc_event_send( p_md->p_event_manager, &event );
+    libvlc_media_descriptor_release( p_md_child );
+}
+
 /**************************************************************************
  * input_item_meta_changed (Private) (vlc event Callback)
  **************************************************************************/
@@ -93,6 +116,10 @@ static void input_item_meta_changed( const vlc_event_t *p_event,
  **************************************************************************/
 static void install_input_item_observer( libvlc_media_descriptor_t *p_md )
 {
+    vlc_event_attach( &p_md->p_input_item->event_manager,
+                      vlc_InputItemSubItemAdded,
+                      input_item_subitem_added,
+                      p_md );
     vlc_event_attach( &p_md->p_input_item->event_manager,
                       vlc_InputItemMetaChanged,
                       input_item_meta_changed,
@@ -104,6 +131,10 @@ static void install_input_item_observer( libvlc_media_descriptor_t *p_md )
  **************************************************************************/
 static void uninstall_input_item_observer( libvlc_media_descriptor_t *p_md )
 {
+    vlc_event_detach( &p_md->p_input_item->event_manager,
+                      vlc_InputItemSubItemAdded,
+                      input_item_subitem_added,
+                      p_md );
     vlc_event_detach( &p_md->p_input_item->event_manager,
                       vlc_InputItemMetaChanged,
                       input_item_meta_changed,
@@ -148,8 +179,12 @@ libvlc_media_descriptor_t * libvlc_media_descriptor_new_from_input_item(
     p_md->b_preparsed       = VLC_TRUE;
     p_md->i_refcount        = 1;
     p_md->p_event_manager = libvlc_event_manager_new( p_md, p_instance, p_e );
+
     libvlc_event_manager_register_event_type( p_md->p_event_manager, 
         libvlc_MediaDescriptorMetaChanged, p_e );
+    libvlc_event_manager_register_event_type( p_md->p_event_manager, 
+        libvlc_MediaDescriptorSubItemAdded, p_e );
+
     vlc_gc_incref( p_md->p_input_item );
 
     install_input_item_observer( p_md );