Commit 6c0ceeb3 authored by Clément Stenac's avatar Clément Stenac

Remove playlist info accessors (as they now belong to input_item) and use...

Remove playlist info accessors (as they now belong to input_item) and use vlc_input_item_AddInfo and vlc_input_item_GetInfo instead
parent f2797b3e
...@@ -330,7 +330,6 @@ SOURCES_libvlc_common = \ ...@@ -330,7 +330,6 @@ SOURCES_libvlc_common = \
src/playlist/view.c \ src/playlist/view.c \
src/playlist/item.c \ src/playlist/item.c \
src/playlist/item-ext.c \ src/playlist/item-ext.c \
src/playlist/info.c \
src/playlist/services_discovery.c \ src/playlist/services_discovery.c \
src/input/access.c \ src/input/access.c \
src/input/clock.c \ src/input/clock.c \
......
...@@ -158,6 +158,9 @@ static inline void vlc_input_item_Clean( input_item_t *p_i ) ...@@ -158,6 +158,9 @@ static inline void vlc_input_item_Clean( input_item_t *p_i )
vlc_mutex_destroy( &p_i->lock ); vlc_mutex_destroy( &p_i->lock );
} }
VLC_EXPORT( char *, vlc_input_item_GetInfo, ( input_item_t *p_i, const char *psz_cat,const char *psz_name ) );
VLC_EXPORT(int, vlc_input_item_AddInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) );
/***************************************************************************** /*****************************************************************************
* Seek point: (generalisation of chapters) * Seek point: (generalisation of chapters)
*****************************************************************************/ *****************************************************************************/
......
...@@ -331,16 +331,6 @@ VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item ...@@ -331,16 +331,6 @@ VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item
VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) ); VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) );
VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) ); VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) );
/* Info functions */
VLC_EXPORT( char * , playlist_GetInfo, ( playlist_t * , int, const char *, const char *) );
VLC_EXPORT( char * , playlist_ItemGetInfo, ( playlist_item_t * , const char *, const char *) );
VLC_EXPORT( info_category_t*, playlist_ItemGetCategory, ( playlist_item_t *, const char *) );
VLC_EXPORT( info_category_t*, playlist_ItemCreateCategory, ( playlist_item_t *, const char *) );
VLC_EXPORT( int, playlist_AddInfo, (playlist_t *, int, const char * , const char *, const char *, ...) );
VLC_EXPORT( int, playlist_ItemAddInfo, (playlist_item_t *, const char * , const char *, const char *, ...) );
VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) ); VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) );
/* Playlist sorting */ /* Playlist sorting */
......
...@@ -801,7 +801,7 @@ CDDAFormatTitle( const access_t *p_access, track_t i_track ) ...@@ -801,7 +801,7 @@ CDDAFormatTitle( const access_t *p_access, track_t i_track )
#define add_playlist_track_info_str(TITLE, FIELD) \ #define add_playlist_track_info_str(TITLE, FIELD) \
if (FIELD && strlen(FIELD)) \ if (FIELD && strlen(FIELD)) \
{ \ { \
playlist_ItemAddInfo( p_item, _("Track"), _(TITLE), \ vlc_input_item_AddInfo( &p_item->input, _("Track"), _(TITLE), \
"%s", FIELD); \ "%s", FIELD); \
} }
...@@ -844,14 +844,14 @@ CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -844,14 +844,14 @@ CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda,
} }
int CDDAAddMetaToItem( access_t *p_access, cdda_data_t *p_cdda, int CDDAAddMetaToItem( access_t *p_access, cdda_data_t *p_cdda,
playlist_item_t *p_item, int i_track, playlist_item_t *p_item, int i_track,
vlc_bool_t b_single ) vlc_bool_t b_single )
{ {
vlc_mutex_lock( &p_item->input.lock ); vlc_mutex_lock( &p_item->input.lock );
add_playlist_track_info_str("Source", p_cdda->psz_source); add_playlist_track_info_str("Source", p_cdda->psz_source);
playlist_ItemAddInfo( p_item, _("Track"), _("Track Number"), vlc_input_item_AddInfo( &p_item->input, _("Track"), _("Track Number"),
"%d", i_track ); "%d", i_track );
if (p_cdda->p_cdtext[i_track]) if (p_cdda->p_cdtext[i_track])
{ {
......
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
p_item->input.psz_uri = strdup( [[o_uri_txt stringValue] UTF8String] ); p_item->input.psz_uri = strdup( [[o_uri_txt stringValue] UTF8String] );
p_item->input.psz_name = strdup( [[o_title_txt stringValue] UTF8String] ); p_item->input.psz_name = strdup( [[o_title_txt stringValue] UTF8String] );
playlist_ItemAddInfo( p_item, _("General"), _("Author"), [[o_author_txt stringValue] UTF8String]); vlc_input_item_AddInfo( &p_item->input, _("General"), _("Author"), [[o_author_txt stringValue] UTF8String]);
vlc_mutex_unlock( &p_item->input.lock ); vlc_mutex_unlock( &p_item->input.lock );
val.b_bool = VLC_TRUE; val.b_bool = VLC_TRUE;
......
...@@ -132,18 +132,6 @@ LRESULT ItemInfoDialog::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, ...@@ -132,18 +132,6 @@ LRESULT ItemInfoDialog::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,
70, 10 + 15 + 10 - 3, rcClient.right - 70 - 10, 15 + 6, 70, 10 + 15 + 10 - 3, rcClient.right - 70 - 10, 15 + 6,
hwnd, NULL, hInst, NULL); hwnd, NULL, hInst, NULL);
/* Author Textbox */
author_label = CreateWindow( _T("STATIC"), _T("Author:"),
WS_CHILD | WS_VISIBLE | SS_RIGHT ,
0, 10 + 2*( 15 + 10 ), 60, 15,
hwnd, NULL, hInst, NULL);
author_text = CreateWindow( _T("EDIT"),
_FROMMB(playlist_ItemGetInfo( p_item, _("General"), _("Author") )),
WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
70, 10 + 2*( 15 + 10 ) - 3, rcClient.right - 70 - 10, 15 + 6,
hwnd, NULL, hInst, NULL );
/* CheckBox */ /* CheckBox */
checkbox_label = CreateWindow( _T("STATIC"), _T("Item Enabled:"), checkbox_label = CreateWindow( _T("STATIC"), _T("Item Enabled:"),
WS_CHILD | WS_VISIBLE | SS_RIGHT , WS_CHILD | WS_VISIBLE | SS_RIGHT ,
...@@ -290,10 +278,6 @@ void ItemInfoDialog::OnOk() ...@@ -290,10 +278,6 @@ void ItemInfoDialog::OnOk()
if( p_item->input.psz_uri ) free( p_item->input.psz_uri ); if( p_item->input.psz_uri ) free( p_item->input.psz_uri );
p_item->input.psz_uri = strdup( _TOMB(psz_uri) ); p_item->input.psz_uri = strdup( _TOMB(psz_uri) );
TCHAR psz_author[MAX_PATH];
Edit_GetText( author_text, psz_author, MAX_PATH );
playlist_ItemAddInfo( p_item, "General", "Author", _TOMB(psz_author) );
vlc_bool_t b_old_enabled = p_item->b_enabled; vlc_bool_t b_old_enabled = p_item->b_enabled;
playlist_t * p_playlist = (playlist_t *) playlist_t * p_playlist = (playlist_t *)
......
...@@ -253,9 +253,6 @@ protected: ...@@ -253,9 +253,6 @@ protected:
HWND name_label; HWND name_label;
HWND name_text; HWND name_text;
HWND author_label;
HWND author_text;
HWND checkbox_label; HWND checkbox_label;
HWND enabled_checkbox; HWND enabled_checkbox;
......
...@@ -51,7 +51,6 @@ enum ...@@ -51,7 +51,6 @@ enum
{ {
Uri_Event, Uri_Event,
Name_Event, Name_Event,
Author_Event,
Enabled_Event, Enabled_Event,
}; };
...@@ -155,19 +154,6 @@ wxPanel *ItemInfoDialog::InfoPanel( wxWindow* parent ) ...@@ -155,19 +154,6 @@ wxPanel *ItemInfoDialog::InfoPanel( wxWindow* parent )
sizer->Add( name_label, 0 , wxALIGN_LEFT |wxALL , 5 ); sizer->Add( name_label, 0 , wxALIGN_LEFT |wxALL , 5 );
sizer->Add( name_text, 1 , wxALIGN_RIGHT | wxALL , 5 ); sizer->Add( name_text, 1 , wxALIGN_RIGHT | wxALL , 5 );
/* Author Textbox */
wxStaticText *author_label =
new wxStaticText( info_panel, -1, wxU(_("Author")) );
author_text = new wxTextCtrl( info_panel, Uri_Event,
wxU( playlist_ItemGetInfo( p_item,
_("General"), _("Author") ) ),
wxDefaultPosition, wxSize( 300, -1 ),
wxTE_PROCESS_ENTER);
sizer->Add( author_label, 0 , wxALIGN_LEFT | wxALL , 5 );
sizer->Add( author_text, 1 , wxALIGN_RIGHT | wxALL , 5);
/* Treeview */ /* Treeview */
info_tree = new wxTreeCtrl( info_panel, -1, wxDefaultPosition, info_tree = new wxTreeCtrl( info_panel, -1, wxDefaultPosition,
wxSize(220,200), wxSize(220,200),
...@@ -221,8 +207,6 @@ void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) ) ...@@ -221,8 +207,6 @@ void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
vlc_mutex_lock( &p_item->input.lock ); vlc_mutex_lock( &p_item->input.lock );
p_item->input.psz_name = strdup( name_text->GetLineText(0).mb_str() ); p_item->input.psz_name = strdup( name_text->GetLineText(0).mb_str() );
p_item->input.psz_uri = strdup( uri_text->GetLineText(0).mb_str() ); p_item->input.psz_uri = strdup( uri_text->GetLineText(0).mb_str() );
playlist_ItemAddInfo( p_item,"General","Author",
author_text->GetLineText(0).mb_str() );
vlc_mutex_unlock( &p_item->input.lock ); vlc_mutex_unlock( &p_item->input.lock );
EndModal( wxID_OK ); EndModal( wxID_OK );
} }
......
...@@ -517,7 +517,8 @@ void Playlist::UpdateTreeItem( playlist_t *p_playlist, wxTreeItemId item ) ...@@ -517,7 +517,8 @@ void Playlist::UpdateTreeItem( playlist_t *p_playlist, wxTreeItemId item )
wxString msg; wxString msg;
wxString duration = wxU( "" ); wxString duration = wxU( "" );
char *psz_author = playlist_ItemGetInfo( p_item, _("Meta-information"), char *psz_author = vlc_input_item_GetInfo( &p_item->input,
_("Meta-information"),
_("Artist")); _("Artist"));
char psz_duration[MSTRTIME_MAX_SIZE]; char psz_duration[MSTRTIME_MAX_SIZE];
mtime_t dur = p_item->input.i_duration; mtime_t dur = p_item->input.i_duration;
...@@ -526,7 +527,7 @@ void Playlist::UpdateTreeItem( playlist_t *p_playlist, wxTreeItemId item ) ...@@ -526,7 +527,7 @@ void Playlist::UpdateTreeItem( playlist_t *p_playlist, wxTreeItemId item )
{ {
secstotimestr( psz_duration, dur/1000000 ); secstotimestr( psz_duration, dur/1000000 );
duration.Append( wxU( " ( " ) + wxString( wxU( psz_duration ) ) + duration.Append( wxU( " ( " ) + wxString( wxU( psz_duration ) ) +
wxU( ")" ) ); wxU( " )" ) );
} }
if( !strcmp( psz_author, "" ) || p_item->input.b_fixed_name == VLC_TRUE ) if( !strcmp( psz_author, "" ) || p_item->input.b_fixed_name == VLC_TRUE )
......
...@@ -940,7 +940,6 @@ private: ...@@ -940,7 +940,6 @@ private:
wxTextCtrl *uri_text; wxTextCtrl *uri_text;
wxTextCtrl *name_text; wxTextCtrl *name_text;
wxTextCtrl *author_text;
wxTreeCtrl *info_tree; wxTreeCtrl *info_tree;
wxTreeItemId info_root; wxTreeItemId info_root;
......
...@@ -129,6 +129,8 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) ...@@ -129,6 +129,8 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
case INPUT_ADD_INFO: case INPUT_ADD_INFO:
{ {
/* FIXME : Impossible to use vlc_input_item_AddInfo because of
* the ... problem ? */
char *psz_cat = (char *)va_arg( args, char * ); char *psz_cat = (char *)va_arg( args, char * );
char *psz_name = (char *)va_arg( args, char * ); char *psz_name = (char *)va_arg( args, char * );
char *psz_format = (char *)va_arg( args, char * ); char *psz_format = (char *)va_arg( args, char * );
...@@ -204,32 +206,8 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) ...@@ -204,32 +206,8 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
int i; int i;
*ppsz_value = NULL; *ppsz_value = NULL;
vlc_mutex_lock( &p_input->input.p_item->lock ); *ppsz_value = vlc_input_item_GetInfo( p_input->input.p_item,
for( i = 0; i < p_input->input.p_item->i_categories; i++ ) psz_cat, psz_name );
{
if( !strcmp( p_input->input.p_item->pp_categories[i]->psz_name,
psz_cat ) ) break;
}
if( i != p_input->input.p_item->i_categories )
{
info_category_t *p_cat;
p_cat = p_input->input.p_item->pp_categories[i];
for( i = 0; i < p_cat->i_infos; i++ )
{
if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )
{
if( p_cat->pp_infos[i]->psz_value )
{
*ppsz_value =strdup(p_cat->pp_infos[i]->psz_value);
i_ret = VLC_SUCCESS;
}
break;
}
}
}
vlc_mutex_unlock( &p_input->input.p_item->lock );
return i_ret; return i_ret;
} }
...@@ -442,7 +420,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) ...@@ -442,7 +420,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
int i; int i;
vlc_mutex_lock( &p_input->input.p_item->lock ); vlc_mutex_lock( &p_input->input.p_item->lock );
/* Check if option already exists */ /* Check if option already exists */
for( i = 0; i < p_input->input.p_item->i_options; i++ ) for( i = 0; i < p_input->input.p_item->i_options; i++ )
{ {
if( !strncmp( p_input->input.p_item->ppsz_options[i], if( !strncmp( p_input->input.p_item->ppsz_options[i],
......
...@@ -2442,3 +2442,104 @@ static void MRLSections( input_thread_t *p_input, char *psz_source, ...@@ -2442,3 +2442,104 @@ static void MRLSections( input_thread_t *p_input, char *psz_source,
psz_source, *pi_title_start, *pi_chapter_start, psz_source, *pi_title_start, *pi_chapter_start,
*pi_title_end, *pi_chapter_end ); *pi_title_end, *pi_chapter_end );
} }
/***********************************************************************
* Info management functions
***********************************************************************/
char *vlc_input_item_GetInfo( input_item_t *p_i,
const char *psz_cat,
const char *psz_name )
{
int i,j;
vlc_mutex_lock( &p_i->lock );
for( i = 0 ; i< p_i->i_categories ; i++ )
{
info_category_t *p_cat = p_i->pp_categories[i];
if( !psz_cat || strcmp( p_cat->psz_name, psz_cat ) )
continue;
for( j = 0; j < p_cat->i_infos ; j++ )
{
if( !strcmp( p_cat->pp_infos[j]->psz_name, psz_name ) )
{
vlc_mutex_unlock( &p_i->lock );
return strdup( p_cat->pp_infos[j]->psz_value );
}
}
}
vlc_mutex_unlock( &p_i->lock );
return strdup( "" );
}
int vlc_input_item_AddInfo( input_item_t *p_i,
const char *psz_cat,
const char *psz_name,
const char *psz_format, ... )
{
va_list args;
int i;
info_t *p_info = NULL;
info_category_t *p_cat = NULL ;
vlc_mutex_lock( &p_i->lock );
for( i = 0 ; i < p_i->i_categories ; i ++ )
{
if( !strcmp( p_i->pp_categories[i]->psz_name, psz_cat ) )
{
p_cat = p_i->pp_categories[i];
break;
}
}
if( !p_cat )
{
if( ( p_cat = (info_category_t *)malloc(
sizeof( info_category_t ) ) ) == NULL )
{
vlc_mutex_unlock( &p_i->lock );
return VLC_EGENERIC;
}
p_cat->psz_name = strdup( psz_cat );
p_cat->i_infos = 0;
p_cat->pp_infos = 0;
INSERT_ELEM( p_i->pp_categories, p_i->i_categories, p_i->i_categories,
p_cat );
}
for( i = 0; i< p_cat->i_infos; i++ )
{
if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )
{
p_info = p_cat->pp_infos[i];
break;
}
}
if( !p_info )
{
if( ( p_info = (info_t *)malloc( sizeof( info_t ) ) ) == NULL )
{
vlc_mutex_unlock( &p_i->lock );
return VLC_EGENERIC;
}
INSERT_ELEM( p_cat->pp_infos, p_cat->i_infos, p_cat->i_infos, p_info );
p_info->psz_name = strdup( psz_name );
}
else
{
if( p_info->psz_value ) free( p_info->psz_value );
}
va_start( args, psz_format );
vasprintf( &p_info->psz_value, psz_format, args);
va_end( args );
vlc_mutex_unlock( &p_i->lock );
return VLC_SUCCESS;
}
/*****************************************************************************
* info.c : Playlist info management
*****************************************************************************
* Copyright (C) 1999-2004 VideoLAN
* $Id$
*
* Authors: Clment Stenac <zorglub@videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#include <stdlib.h> /* free(), strtol() */
#include <stdio.h> /* sprintf() */
#include <string.h> /* strerror() */
#include <vlc/vlc.h>
#include <vlc/input.h>
#include "vlc_playlist.h"
/**
* Get one special info
* Must be entered with playlist lock
*
* \param p_playlist the playlist to get the info from
* \param i_pos position of the item on
* which we want the info ( -1 for current )
* \param psz_cat the category in which the info is stored
* \param psz_name the name of the info
* \return the info value if any, an empty string else
*/
char * playlist_GetInfo( playlist_t *p_playlist, int i_pos,
const char *psz_cat, const char *psz_name )
{
playlist_item_t *p_item;
char *psz_buffer;
/* Sanity check */
if( p_playlist == NULL) return strdup("");
p_item = playlist_ItemGetByPos( p_playlist, i_pos );
if( !p_item ) return strdup("");
vlc_mutex_lock( &p_item->input.lock );
psz_buffer = playlist_ItemGetInfo( p_item , psz_cat, psz_name );
vlc_mutex_unlock( &p_item->input.lock );
return psz_buffer;
}
/**
* Get one special info, from an item (no need for p_playlist)
*
* \param p_item the item on which we want the info
* \param psz_cat the category in which the info is stored
* \param psz_name the name of the info
* \return the info value if any, an empty string else
*/
char * playlist_ItemGetInfo( playlist_item_t *p_item,
const char * psz_cat, const char *psz_name )
{
int i, j;
for( i = 0 ; i< p_item->input.i_categories ; i++ )
{
info_category_t *p_category = p_item->input.pp_categories[i];
if( !psz_cat || strcmp( p_category->psz_name , psz_cat ) ) continue;
for( j = 0 ; j< p_category->i_infos ; j++ )
{
if( !strcmp( p_category->pp_infos[j]->psz_name, psz_name) )
{
return strdup( p_category->pp_infos[j]->psz_value );
}
}
}
return strdup("");
}
/**
* Get one info category (no p_playlist). Create it if it does not exist
*
* \param p_item the playlist item to get the category from
* \param psz_cat the category we want
* \return the info category.
*/
info_category_t * playlist_ItemGetCategory( playlist_item_t *p_item,
const char *psz_cat )
{
int i;
/* Search the category */
for( i = 0 ; i< p_item->input.i_categories ; i++ )
{
if( !strncmp( p_item->input.pp_categories[i]->psz_name, psz_cat,
strlen(psz_cat) ) )
{
return p_item->input.pp_categories[i];
}
}
/* We did not find the category, create it */
return playlist_ItemCreateCategory( p_item, psz_cat );
}
/**
* Create one info category for an item ( no p_playlist required )
*
* \param p_item the item to create category for
* \param psz_cat the category we want to create
* \return the info category.
*/
info_category_t * playlist_ItemCreateCategory( playlist_item_t *p_item,
const char *psz_cat )
{
info_category_t *p_cat;
int i;
for( i = 0 ; i< p_item->input.i_categories ; i++)
{
if( !strcmp( p_item->input.pp_categories[i]->psz_name,psz_cat ) )
{
return p_item->input.pp_categories[i];
}
}
if( ( p_cat = malloc( sizeof( info_category_t) ) ) == NULL )
{
return NULL;
}
p_cat->psz_name = strdup( psz_cat);
p_cat->i_infos = 0;
p_cat->pp_infos = NULL;
INSERT_ELEM( p_item->input.pp_categories, p_item->input.i_categories,
p_item->input.i_categories, p_cat );
return p_cat;
}
/**
* Add an info item
*
* \param p_playlist the playlist
* \param i_item the position of the item on which we want
* the info ( -1 for current )
* \param psz_cat the category we want to put the info into
* (gets created if needed)
* \param psz_name the name of the info
* \param psz_format printf-style info
* \return VLC_SUCCESS
*/
int playlist_AddInfo( playlist_t *p_playlist, int i_item,
const char * psz_cat, const char *psz_name,
const char * psz_format, ...)
{
va_list args;
int i_ret;
playlist_item_t *p_item;
char *psz_value;
/* Sanity check */
if( p_playlist == NULL) return VLC_EGENERIC;
p_item = playlist_ItemGetByPos( p_playlist, i_item );
if( !p_item ) return VLC_ENOOBJ;
va_start( args, psz_format );
vasprintf( &psz_value, psz_format, args );
va_end( args );
vlc_mutex_lock( &p_item->input.lock );
i_ret = playlist_ItemAddInfo( p_item, psz_cat, psz_name, psz_value );
vlc_mutex_unlock( &p_item->input.lock );
free( psz_value );
return i_ret;
}
/**
* Add info to one item ( no need for p_playlist )
*
* \param p_item the item for which we add the info
* \param psz_cat the category in which the info is stored
* \param psz_name the name of the info
* \param psz_format printf-style info
* \return VLC_SUCCESS on success
*/
int playlist_ItemAddInfo( playlist_item_t *p_item,
const char *psz_cat, const char *psz_name,
const char *psz_format, ... )
{
va_list args;
int i;
int i_new = VLC_TRUE;
info_t *p_info = NULL;
info_category_t *p_cat;
/* Find or create the category */
p_cat = playlist_ItemGetCategory( p_item, psz_cat );
if( p_cat == NULL) return VLC_EGENERIC;
for( i = 0 ; i< p_cat->i_infos ; i++)
{
if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )
{
/* This info is not new */
p_info = p_cat->pp_infos[i];
i_new = VLC_FALSE;
break;
}
}
/* New info, create it */
if( p_info == NULL )
{
if( ( p_info = malloc( sizeof( info_t) ) ) == NULL )
{
return VLC_EGENERIC;
}
p_info->psz_name = strdup( psz_name);
}
else
{
if( p_info->psz_value != NULL ) free( p_info->psz_value ) ;
}
va_start( args, psz_format );
vasprintf( &p_info->psz_value, psz_format, args );
va_end( args );
/* If this is new, insert it */
if( i_new == VLC_TRUE )
{
INSERT_ELEM( p_cat->pp_infos, p_cat->i_infos, p_cat->i_infos, p_info );
}
return VLC_SUCCESS;
}
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <vlc/vlc.h> #include <vlc/vlc.h>
#include <vlc/input.h> #include <vlc/input.h>
#include "vlc_input.h"
#include "vlc_playlist.h" #include "vlc_playlist.h"
static void GuessType( input_item_t *p_item); static void GuessType( input_item_t *p_item);
...@@ -87,8 +88,6 @@ playlist_item_t * playlist_ItemNewWithType( vlc_object_t *p_obj, ...@@ -87,8 +88,6 @@ playlist_item_t * playlist_ItemNewWithType( vlc_object_t *p_obj,
if( p_item->input.i_type == ITEM_TYPE_UNKNOWN ) if( p_item->input.i_type == ITEM_TYPE_UNKNOWN )
GuessType( &p_item->input ); GuessType( &p_item->input );
playlist_ItemCreateCategory( p_item, _("General") );
return p_item; return p_item;
} }
...@@ -276,8 +275,8 @@ int playlist_ItemSetDuration( playlist_item_t *p_item, mtime_t i_duration ) ...@@ -276,8 +275,8 @@ int playlist_ItemSetDuration( playlist_item_t *p_item, mtime_t i_duration )
{ {
memcpy( psz_buffer, "--:--:--", sizeof("--:--:--") ); memcpy( psz_buffer, "--:--:--", sizeof("--:--:--") );
} }
playlist_ItemAddInfo( p_item, _("General") , _("Duration"), vlc_input_item_AddInfo( &p_item->input, _("General") , _("Duration"),
"%s", psz_buffer ); "%s", psz_buffer );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
...@@ -237,7 +237,7 @@ int playlist_NodeGroup( playlist_t * p_playlist , int i_view, ...@@ -237,7 +237,7 @@ int playlist_NodeGroup( playlist_t * p_playlist , int i_view,
} }
else if ( i_mode == SORT_AUTHOR ) else if ( i_mode == SORT_AUTHOR )
{ {
psz_search = playlist_ItemGetInfo( pp_items[i], psz_search = vlc_input_item_GetInfo( &pp_items[i]->input,
_("Meta-information"), _( "Artist" ) ); _("Meta-information"), _( "Artist" ) );
} }
......
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