+ /* Additional boundary checks */
+ if( i_mode & PLAYLIST_APPEND )
+ {
+ i_pos++;
+ }
+
+ if( i_pos < 0 )
+ {
+ i_pos = 0;
+ }
+ else if( i_pos > p_playlist->i_size )
+ {
+ i_pos = p_playlist->i_size;
+ }
+
+ INSERT_ELEM( p_playlist->pp_items, p_playlist->i_size, i_pos, p_item );
+ INSERT_ELEM( p_playlist->pp_all_items, p_playlist->i_all_size,
+ p_playlist->i_all_size, p_item );
+ p_playlist->i_enabled ++;
+
+ /* We update the ALL view directly */
+ playlist_ViewUpdate( p_playlist, VIEW_ALL );
+
+ /* Add the item to the General category */
+ if( b_end == VLC_TRUE )
+ {
+ playlist_NodeAppend( p_playlist, VIEW_CATEGORY, p_item,
+ p_playlist->p_general );
+ p_add->i_item = p_item->input.i_id;
+ p_add->i_node = p_playlist->p_general->input.i_id;
+ p_add->i_view = VIEW_CATEGORY;
+ val.p_address = p_add;
+ var_Set( p_playlist, "item-append", val );
+ }
+ else
+ {
+ playlist_NodeInsert( p_playlist, VIEW_CATEGORY, p_item,
+ p_playlist->p_general, i_pos );
+ }
+
+
+ p_view = playlist_ViewFind( p_playlist, VIEW_ALL );
+ playlist_ItemAddParent( p_item, VIEW_ALL, p_view->p_root );
+
+ /* FIXME : Update sorted views */
+
+ if( p_playlist->i_index >= i_pos )
+ {
+ p_playlist->i_index++;
+ }