]> git.sesse.net Git - vlc/commitdiff
Fixed offline EPG state.
authorLaurent Aimar <fenrir@videolan.org>
Tue, 22 Sep 2009 20:29:41 +0000 (22:29 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Tue, 22 Sep 2009 20:29:41 +0000 (22:29 +0200)
The info panel is flushed and the current epg event is undefined when
stopping the associated input.

src/input/es_out.c
src/input/input_interface.h
src/input/item.c

index e647aa139ba83bffe749a5ef270c788842aa6817..f944502673f08153f11d76c199644424f3fd2441 100644 (file)
@@ -371,6 +371,9 @@ static void EsOutDelete( es_out_t *out )
         free( p_pgrm );
     }
     TAB_CLEAN( p_sys->i_pgrm, p_sys->pgrm );
+
+    input_item_SetEpgOffline( p_sys->p_input->p->p_item );
+
     vlc_mutex_destroy( &p_sys->lock );
 
     free( p_sys );
index 9c3183bec056503a784bdedb7c28ddf64e11f336..7f7347d5765ececc7d4fb669c6959f351bb9b77e 100644 (file)
@@ -38,6 +38,7 @@ 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 );
 void input_item_SetEpg( input_item_t *p_item, const vlc_epg_t *p_epg );
+void input_item_SetEpgOffline( input_item_t * );
 
 int input_Preparse( vlc_object_t *, input_item_t * );
 
index d3030b7b2806b722a572a6ae76cb457752486101..c11cd65842fea6a6d1c1fe2995c50bbf7284a6ca 100644 (file)
@@ -790,6 +790,39 @@ signal:
     }
 }
 
+void input_item_SetEpgOffline( input_item_t *p_item )
+{
+    vlc_mutex_lock( &p_item->lock );
+    for( int i = 0; i < p_item->i_epg; i++ )
+        vlc_epg_SetCurrent( p_item->pp_epg[i], -1 );
+    vlc_mutex_unlock( &p_item->lock );
+
+#ifdef EPG_DEBUG
+    vlc_mutex_lock( &p_item->lock );
+    const int i_epg_info = p_item->i_epg;
+    char *ppsz_epg_info[i_epg_info];
+    for( int i = 0; i < p_item->i_epg; i++ )
+    {
+        const vlc_epg_t *p_epg = p_item->pp_epg[i];
+        if( asprintf( &ppsz_epg_info[i], "EPG %s", p_epg->psz_name ? p_epg->psz_name : "unknown" ) < 0 )
+            ppsz_epg_info[i] = NULL;
+    }
+    vlc_mutex_unlock( &p_item->lock );
+
+    for( int i = 0; i < i_epg_info; i++ )
+    {
+        if( !ppsz_epg_info[i] )
+            continue;
+        input_item_DelInfo( p_item, ppsz_epg_info[i], NULL );
+        free( ppsz_epg_info[i] );
+    }
+#endif
+
+    vlc_event_t event = { .type = vlc_InputItemInfoChanged, };
+    vlc_event_send( &p_item->event_manager, &event );
+}
+
+
 input_item_t *__input_item_NewExt( vlc_object_t *p_obj, const char *psz_uri,
                                   const char *psz_name,
                                   int i_options,