-static void InteractionInit( playlist_t *p_playlist );
-static interaction_t * InteractionGet( vlc_object_t *p_this );
-static void InteractionSearchInterface( interaction_t *
- p_interaction );
-static interaction_dialog_t *DialogGetById( interaction_t* , int );
-static void DialogDestroy( interaction_dialog_t *p_dialog );
-static int DialogSend( vlc_object_t *p_this, interaction_dialog_t *p_dialog );
-
-/**
- * Destroy the interaction system
- * \param The interaction object to destroy
- * \return nothing
- */
-void intf_InteractionDestroy( interaction_t *p_interaction )
-{
- int i;
- // Remove all dialogs - Interfaces must be able to clean up their data
- for( i = p_interaction->i_dialogs -1 ; i >= 0; i-- )
- {
- interaction_dialog_t * p_dialog = p_interaction->pp_dialogs[i];
- DialogDestroy( p_dialog );
- REMOVE_ELEM( p_interaction->pp_dialogs, p_interaction->i_dialogs, i );
- }
- vlc_object_destroy( p_interaction );
-}
-
-/**
- * The main interaction processing loop
- * This function is called from the playlist loop
- *
- * \param p_playlist the parent playlist
- * \return nothing
- */
-void intf_InteractionManage( playlist_t *p_playlist )
-{
- vlc_value_t val;
- int i_index;
- interaction_t *p_interaction = p_playlist->p_interaction;
-
- // Nothing to do
- if( p_interaction->i_dialogs == 0 ) return;
-
- vlc_mutex_lock( &p_interaction->object_lock );
-
- InteractionSearchInterface( p_interaction );
- if( !p_interaction->p_intf )
- {
- // We mark all dialogs as answered with their "default" answer
- for( i_index = 0 ; i_index < p_interaction->i_dialogs; i_index ++ )
- {
- interaction_dialog_t *p_dialog = p_interaction->pp_dialogs[i_index];
- p_dialog->i_return = DIALOG_DEFAULT; // Give default answer
-
- // Pretend we have hidden and destroyed it
- if( p_dialog->i_status == HIDDEN_DIALOG )
- p_dialog->i_status = DESTROYED_DIALOG;
- else
- p_dialog->i_status = HIDING_DIALOG;
- }
- }
- else
- vlc_object_yield( p_interaction->p_intf );
-
- for( i_index = 0 ; i_index < p_interaction->i_dialogs; i_index ++ )
- {
- interaction_dialog_t *p_dialog = p_interaction->pp_dialogs[i_index];
- switch( p_dialog->i_status )
- {
- case ANSWERED_DIALOG:
- // Ask interface to hide it
- p_dialog->i_action = INTERACT_HIDE;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- p_dialog->i_status = HIDING_DIALOG;
- break;
- case UPDATED_DIALOG:
- p_dialog->i_action = INTERACT_UPDATE;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- p_dialog->i_status = SENT_DIALOG;
- break;
- case HIDDEN_DIALOG:
- if( !(p_dialog->i_flags & DIALOG_GOT_ANSWER) ) break;
- p_dialog->i_action = INTERACT_DESTROY;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- break;
- case DESTROYED_DIALOG:
- // Interface has now destroyed it, remove it
- REMOVE_ELEM( p_interaction->pp_dialogs, p_interaction->i_dialogs,
- i_index);
- i_index--;
- DialogDestroy( p_dialog );
- break;
- case NEW_DIALOG:
- // This is truly a new dialog, send it.
- p_dialog->i_action = INTERACT_NEW;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- p_dialog->i_status = SENT_DIALOG;
- break;
- }
- }
-
- if( p_interaction->p_intf )
- {
- vlc_object_release( p_interaction->p_intf );
- }