Commit b1c5d1c0 authored by Ilkka Ollakka's avatar Ilkka Ollakka

Add state-callback to check item-change, change playlist-current to

item-change for IM callback.
Check callback and handle other than interface-update stuff only if they
have same id than current input

Should fix that meta not showing/too many signals sended in beginning.
Shouldn't break anything (as always ;)
parent 5351f1b8
...@@ -78,11 +78,19 @@ void InputManager::setInput( input_thread_t *_p_input ) ...@@ -78,11 +78,19 @@ void InputManager::setInput( input_thread_t *_p_input )
delInput(); delInput();
p_input = _p_input; p_input = _p_input;
b_had_audio = b_had_video = b_has_audio = b_has_video = false; b_had_audio = b_had_video = b_has_audio = b_has_video = false;
if( p_input ) if( p_input && !( p_input->b_dead || p_input->b_die ) )
{ {
vlc_object_yield( p_input ); vlc_object_yield( p_input );
emit statusChanged( PLAYING_S ); emit statusChanged( PLAYING_S );
UpdateMeta();
UpdateTracks();
UpdateTitle();
UpdateArt();
addCallbacks(); addCallbacks();
i_input_id = input_GetItem( p_input )->i_id;
} else {
p_input = NULL;
i_input_id = 0;
} }
} }
...@@ -97,6 +105,7 @@ void InputManager::delInput() ...@@ -97,6 +105,7 @@ void InputManager::delInput()
vlc_object_release( p_input ); vlc_object_release( p_input );
i_old_playing_status = END_S; i_old_playing_status = END_S;
i_input_id = 0;
old_name=qfu(""); old_name=qfu("");
artUrl = qfu(""); artUrl = qfu("");
emit positionUpdated( 0.0, 0 ,0 ); emit positionUpdated( 0.0, 0 ,0 );
...@@ -148,6 +157,7 @@ void InputManager::delCallbacks() ...@@ -148,6 +157,7 @@ void InputManager::delCallbacks()
void InputManager::customEvent( QEvent *event ) void InputManager::customEvent( QEvent *event )
{ {
int type = event->type(); int type = event->type();
IMEvent *ple = static_cast<IMEvent *>(event);
//msg_Dbg( p_intf, "New IM Event of type: %i", type ); //msg_Dbg( p_intf, "New IM Event of type: %i", type );
if ( type != PositionUpdate_Type && if ( type != PositionUpdate_Type &&
type != ItemChanged_Type && type != ItemChanged_Type &&
...@@ -155,16 +165,14 @@ void InputManager::customEvent( QEvent *event ) ...@@ -155,16 +165,14 @@ void InputManager::customEvent( QEvent *event )
type != ItemTitleChanged_Type && type != ItemTitleChanged_Type &&
type != ItemStateChanged_Type ) type != ItemStateChanged_Type )
return; return;
if( !p_input || p_input->b_die || p_input->b_dead )
return;
if( type != PositionUpdate_Type && ( i_input_id != ple->i_id ) )
return;
if( type != PositionUpdate_Type ) if( type != PositionUpdate_Type )
msg_Dbg( p_intf, "New Event: type %i", type ); msg_Dbg( p_intf, "New Event: type %i", type );
/* Delete the input */
if( !p_input || p_input->b_dead || p_input->b_die )
{
delInput();
return;
}
/* Actions */ /* Actions */
switch( type ) switch( type )
...@@ -442,11 +450,10 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf ) ...@@ -442,11 +450,10 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf )
im = new InputManager( this, p_intf ); im = new InputManager( this, p_intf );
var_AddCallback( THEPL, "item-change", PLItemChanged, this ); var_AddCallback( THEPL, "item-change", PLItemChanged, this );
var_AddCallback( THEPL, "item-change", ItemChanged, im );
var_AddCallback( THEPL, "playlist-current", PLItemChanged, this ); var_AddCallback( THEPL, "playlist-current", PLItemChanged, this );
var_AddCallback( THEPL, "activity", PLItemChanged, this ); var_AddCallback( THEPL, "activity", PLItemChanged, this );
var_AddCallback( THEPL, "playlist-current", ItemChanged, im );
var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this ); var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
// No necessary, I think TODO REMOVE ME at the end // No necessary, I think TODO REMOVE ME at the end
...@@ -461,16 +468,18 @@ MainInputManager::~MainInputManager() ...@@ -461,16 +468,18 @@ MainInputManager::~MainInputManager()
{ {
if( p_input ) if( p_input )
{ {
var_DelCallback( p_input, "state", PLItemChanged, this );
vlc_object_release( p_input );
emit inputChanged( NULL ); emit inputChanged( NULL );
} }
var_DelCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this ); var_DelCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
var_DelCallback( THEPL, "playlist-current", PLItemChanged, this );
var_DelCallback( THEPL, "activity", PLItemChanged, this ); var_DelCallback( THEPL, "activity", PLItemChanged, this );
var_DelCallback( THEPL, "item-change", ItemChanged, im );
var_DelCallback( THEPL, "item-change", PLItemChanged, this ); var_DelCallback( THEPL, "item-change", PLItemChanged, this );
var_DelCallback( THEPL, "playlist-current", ItemChanged, im ); var_DelCallback( THEPL, "playlist-current", PLItemChanged, this );
} }
void MainInputManager::customEvent( QEvent *event ) void MainInputManager::customEvent( QEvent *event )
...@@ -492,9 +501,12 @@ void MainInputManager::customEvent( QEvent *event ) ...@@ -492,9 +501,12 @@ void MainInputManager::customEvent( QEvent *event )
vlc_mutex_lock( &p_intf->change_lock ); vlc_mutex_lock( &p_intf->change_lock );
if( p_input && ( p_input->b_dead || p_input->b_die ) ) if( p_input && ( p_input->b_dead || p_input->b_die ) )
{ {
im->delInput(); var_DelCallback( p_input, "state", PLItemChanged, this );
vlc_object_release( p_input );
emit inputChanged( NULL ); emit inputChanged( NULL );
p_input = NULL; p_input = NULL;
vlc_mutex_unlock( &p_intf->change_lock );
return;
} }
if( !p_input ) if( !p_input )
...@@ -503,6 +515,8 @@ void MainInputManager::customEvent( QEvent *event ) ...@@ -503,6 +515,8 @@ void MainInputManager::customEvent( QEvent *event )
p_input = THEPL->p_input; p_input = THEPL->p_input;
if( p_input && !( p_input->b_die || p_input->b_dead) ) if( p_input && !( p_input->b_die || p_input->b_dead) )
{ {
vlc_object_yield( p_input );
var_AddCallback( p_input, "state", PLItemChanged, this );
emit inputChanged( p_input ); emit inputChanged( p_input );
} }
else else
......
...@@ -76,6 +76,7 @@ private: ...@@ -76,6 +76,7 @@ private:
void UpdateArt(); void UpdateArt();
intf_thread_t *p_intf; intf_thread_t *p_intf;
input_thread_t *p_input; input_thread_t *p_input;
int i_input_id;
int i_old_playing_status; int i_old_playing_status;
QString old_name; QString old_name;
QString artUrl; QString artUrl;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment