[vlc-devel] [PATCH 05/15] preparser: send a status code on PreparseEnded

Thomas Guillem thomas at gllm.fr
Thu Apr 14 17:44:54 CEST 2016


---
 include/vlc_events.h        | 4 ++++
 include/vlc_input_item.h    | 8 ++++++++
 src/input/input_interface.h | 2 +-
 src/input/item.c            | 3 ++-
 src/playlist/preparser.c    | 6 ++++--
 5 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/include/vlc_events.h b/include/vlc_events.h
index bca1b2a..9ca571a 100644
--- a/include/vlc_events.h
+++ b/include/vlc_events.h
@@ -188,6 +188,10 @@ typedef struct vlc_event_t
         {
             bool new_value;
         } input_item_error_when_reading_changed;
+        struct input_item_preparse_ended
+        {
+            int new_status;
+        } input_item_preparse_ended;
 
         /* Service discovery events */
         struct vlc_services_discovery_item_added
diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
index 14f569c..4a458cc 100644
--- a/include/vlc_input_item.h
+++ b/include/vlc_input_item.h
@@ -328,6 +328,14 @@ typedef enum input_item_meta_request_option_t
     META_REQUEST_OPTION_DO_INTERACT   = 0x04
 } input_item_meta_request_option_t;
 
+/* status of the vlc_InputItemPreparseEnded event */
+enum input_item_preparse_status
+{
+    ITEM_PREPARSE_SKIPPED,
+    ITEM_PREPARSE_FAILED,
+    ITEM_PREPARSE_DONE
+};
+
 VLC_API int libvlc_MetaRequest(libvlc_int_t *, input_item_t *,
                                input_item_meta_request_option_t );
 VLC_API int libvlc_ArtRequest(libvlc_int_t *, input_item_t *,
diff --git a/src/input/input_interface.h b/src/input/input_interface.h
index a3890f7..0ec778c 100644
--- a/src/input/input_interface.h
+++ b/src/input/input_interface.h
@@ -30,7 +30,7 @@
 /**********************************************************************
  * Item metadata
  **********************************************************************/
-void input_item_SignalPreparseEnded( input_item_t *p_i );
+void input_item_SignalPreparseEnded( input_item_t *p_i, int new_status );
 void input_item_SetPreparsed( input_item_t *p_i, bool b_preparsed );
 void input_item_SetArtNotFound( input_item_t *p_i, bool b_not_found );
 void input_item_SetArtFetched( input_item_t *p_i, bool b_art_fetched );
diff --git a/src/input/item.c b/src/input/item.c
index dc42eba..8b4c97b 100644
--- a/src/input/item.c
+++ b/src/input/item.c
@@ -64,10 +64,11 @@ void input_item_SetErrorWhenReading( input_item_t *p_i, bool b_error )
         vlc_event_send( &p_i->event_manager, &event );
     }
 }
-void input_item_SignalPreparseEnded( input_item_t *p_i )
+void input_item_SignalPreparseEnded( input_item_t *p_i, int status )
 {
     vlc_event_t event;
     event.type = vlc_InputItemPreparseEnded;
+    event.u.input_item_preparse_ended.new_status = status;
     vlc_event_send( &p_i->event_manager, &event );
 }
 
diff --git a/src/playlist/preparser.c b/src/playlist/preparser.c
index 8c94819..5315dc4 100644
--- a/src/playlist/preparser.c
+++ b/src/playlist/preparser.c
@@ -187,7 +187,7 @@ static void Preparse( playlist_preparser_t *preparser, input_item_t *p_item,
                                                        p_item );
         if( input == NULL )
         {
-            input_item_SignalPreparseEnded( p_item );
+            input_item_SignalPreparseEnded( p_item, ITEM_PREPARSE_FAILED );
             return;
         }
 
@@ -205,9 +205,11 @@ static void Preparse( playlist_preparser_t *preparser, input_item_t *p_item,
 
         var_SetAddress( preparser->object, "item-change", p_item );
         input_item_SetPreparsed( p_item, true );
+        input_item_SignalPreparseEnded( p_item, ITEM_PREPARSE_DONE );
     }
+    else if (!b_preparse)
+        input_item_SignalPreparseEnded( p_item, ITEM_PREPARSE_SKIPPED );
 
-    input_item_SignalPreparseEnded( p_item );
 }
 
 /**
-- 
2.8.0.rc3



More information about the vlc-devel mailing list