Commit 5a989669 authored by Clément Stenac's avatar Clément Stenac

Input options inheritance in directory access (Closes:#353)

parent 9fa2642c
...@@ -125,7 +125,7 @@ static int DemuxControl( demux_t *p_demux, int i_query, va_list args ); ...@@ -125,7 +125,7 @@ static int DemuxControl( demux_t *p_demux, int i_query, va_list args );
static int ReadDir( playlist_t *, const char *psz_name, int i_mode, static int ReadDir( playlist_t *, const char *psz_name, int i_mode,
playlist_item_t *, playlist_item_t * ); playlist_item_t *, playlist_item_t *, input_item_t * );
/***************************************************************************** /*****************************************************************************
* Open: open the directory * Open: open the directory
...@@ -184,8 +184,9 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len) ...@@ -184,8 +184,9 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len)
playlist_item_t *p_item_in_category; playlist_item_t *p_item_in_category;
input_item_t *p_current_input = ( (input_thread_t*)p_access->p_parent) input_item_t *p_current_input = ( (input_thread_t*)p_access->p_parent)
->input.p_item; ->input.p_item;
playlist_item_t *p_current = playlist_item_t *p_current = playlist_ItemGetByInput( p_playlist,
playlist_ItemGetByInput( p_playlist, p_current_input, VLC_FALSE ); p_current_input,
VLC_FALSE );
char *psz_name = strdup (p_access->psz_path); char *psz_name = strdup (p_access->psz_path);
if( psz_name == NULL ) if( psz_name == NULL )
...@@ -221,13 +222,15 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len) ...@@ -221,13 +222,15 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len)
msg_Dbg( p_access, "opening directory `%s'", p_access->psz_path ); msg_Dbg( p_access, "opening directory `%s'", p_access->psz_path );
p_current->p_input->i_type = ITEM_TYPE_DIRECTORY; p_current->p_input->i_type = ITEM_TYPE_DIRECTORY;
p_item_in_category = playlist_ItemToNode( p_playlist, p_current, VLC_FALSE ); p_item_in_category = playlist_ItemToNode( p_playlist, p_current,
VLC_FALSE );
i_activity = var_GetInteger( p_playlist, "activity" ); i_activity = var_GetInteger( p_playlist, "activity" );
var_SetInteger( p_playlist, "activity", i_activity + var_SetInteger( p_playlist, "activity", i_activity +
DIRECTORY_ACTIVITY ); DIRECTORY_ACTIVITY );
ReadDir( p_playlist, psz_name, i_mode, p_current, p_item_in_category ); ReadDir( p_playlist, psz_name, i_mode, p_current, p_item_in_category,
p_current_input );
i_activity = var_GetInteger( p_playlist, "activity" ); i_activity = var_GetInteger( p_playlist, "activity" );
var_SetInteger( p_playlist, "activity", i_activity - var_SetInteger( p_playlist, "activity", i_activity -
...@@ -329,7 +332,8 @@ static int Sort (const char **a, const char **b) ...@@ -329,7 +332,8 @@ static int Sort (const char **a, const char **b)
*****************************************************************************/ *****************************************************************************/
static int ReadDir( playlist_t *p_playlist, const char *psz_name, static int ReadDir( playlist_t *p_playlist, const char *psz_name,
int i_mode, playlist_item_t *p_parent, int i_mode, playlist_item_t *p_parent,
playlist_item_t *p_parent_category ) playlist_item_t *p_parent_category,
input_item_t *p_current_input )
{ {
char **pp_dir_content = NULL; char **pp_dir_content = NULL;
int i_dir_content, i, i_return = VLC_SUCCESS; int i_dir_content, i, i_return = VLC_SUCCESS;
...@@ -434,7 +438,8 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, ...@@ -434,7 +438,8 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
/* If we had the parent in category, the it is now node. /* If we had the parent in category, the it is now node.
* Else, we still don't have */ * Else, we still don't have */
if( ReadDir( p_playlist, psz_uri , MODE_EXPAND, if( ReadDir( p_playlist, psz_uri , MODE_EXPAND,
p_node, p_parent_category ? p_node : NULL ) p_node, p_parent_category ? p_node : NULL,
p_current_input )
!= VLC_SUCCESS ) != VLC_SUCCESS )
{ {
i_return = VLC_EGENERIC; i_return = VLC_EGENERIC;
...@@ -469,6 +474,9 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, ...@@ -469,6 +474,9 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
psz_uri, entry, 0, NULL, psz_uri, entry, 0, NULL,
-1, ITEM_TYPE_VFILE ); -1, ITEM_TYPE_VFILE );
if (p_input != NULL) if (p_input != NULL)
{
if( p_current_input )
input_ItemCopyOptions( p_current_input, p_input );
playlist_BothAddInput( p_playlist, p_input, playlist_BothAddInput( p_playlist, p_input,
p_parent_category, p_parent_category,
PLAYLIST_APPEND|PLAYLIST_PREPARSE, PLAYLIST_APPEND|PLAYLIST_PREPARSE,
...@@ -476,6 +484,7 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, ...@@ -476,6 +484,7 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
} }
} }
} }
}
for( i = 0; i < i_extensions; i++ ) for( i = 0; i < i_extensions; i++ )
if( ppsz_extensions[i] ) free( ppsz_extensions[i] ); if( ppsz_extensions[i] ) free( ppsz_extensions[i] );
......
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