src/playlist/view.c \
src/playlist/item.c \
src/playlist/item-ext.c \
- src/playlist/info.c \
src/playlist/services_discovery.c \
src/input/access.c \
src/input/clock.c \
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)
*****************************************************************************/
VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) );
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 *) );
/* Playlist sorting */
#define add_playlist_track_info_str(TITLE, FIELD) \
if (FIELD && strlen(FIELD)) \
{ \
- playlist_ItemAddInfo( p_item, _("Track"), _(TITLE), \
+ vlc_input_item_AddInfo( &p_item->input, _("Track"), _(TITLE), \
"%s", FIELD); \
}
}
int CDDAAddMetaToItem( access_t *p_access, cdda_data_t *p_cdda,
- playlist_item_t *p_item, int i_track,
- vlc_bool_t b_single )
+ playlist_item_t *p_item, int i_track,
+ vlc_bool_t b_single )
{
vlc_mutex_lock( &p_item->input.lock );
add_playlist_track_info_str("Source", p_cdda->psz_source);
- playlist_ItemAddInfo( p_item, _("Track"), _("Track Number"),
- "%d", i_track );
+ vlc_input_item_AddInfo( &p_item->input, _("Track"), _("Track Number"),
+ "%d", i_track );
if (p_cdda->p_cdtext[i_track])
{
p_item->input.psz_uri = strdup( [[o_uri_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 );
val.b_bool = VLC_TRUE;
70, 10 + 15 + 10 - 3, rcClient.right - 70 - 10, 15 + 6,
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_label = CreateWindow( _T("STATIC"), _T("Item Enabled:"),
WS_CHILD | WS_VISIBLE | SS_RIGHT ,
if( p_item->input.psz_uri ) free( p_item->input.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;
playlist_t * p_playlist = (playlist_t *)
HWND name_label;
HWND name_text;
- HWND author_label;
- HWND author_text;
-
HWND checkbox_label;
HWND enabled_checkbox;
{
Uri_Event,
Name_Event,
- Author_Event,
Enabled_Event,
};
sizer->Add( name_label, 0 , wxALIGN_LEFT |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 */
info_tree = new wxTreeCtrl( info_panel, -1, wxDefaultPosition,
wxSize(220,200),
vlc_mutex_lock( &p_item->input.lock );
p_item->input.psz_name = strdup( name_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 );
EndModal( wxID_OK );
}
wxString msg;
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"));
char psz_duration[MSTRTIME_MAX_SIZE];
mtime_t dur = p_item->input.i_duration;
{
secstotimestr( psz_duration, dur/1000000 );
duration.Append( wxU( " ( " ) + wxString( wxU( psz_duration ) ) +
- wxU( ")" ) );
+ wxU( " )" ) );
}
if( !strcmp( psz_author, "" ) || p_item->input.b_fixed_name == VLC_TRUE )
wxTextCtrl *uri_text;
wxTextCtrl *name_text;
- wxTextCtrl *author_text;
wxTreeCtrl *info_tree;
wxTreeItemId info_root;
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_name = (char *)va_arg( args, char * );
char *psz_format = (char *)va_arg( args, char * );
int i;
*ppsz_value = NULL;
- vlc_mutex_lock( &p_input->input.p_item->lock );
- for( i = 0; i < p_input->input.p_item->i_categories; i++ )
- {
- 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 );
+ *ppsz_value = vlc_input_item_GetInfo( p_input->input.p_item,
+ psz_cat, psz_name );
return i_ret;
}
int i;
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++ )
{
if( !strncmp( p_input->input.p_item->ppsz_options[i],
psz_source, *pi_title_start, *pi_chapter_start,
*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;
+}
+
+++ /dev/null
-/*****************************************************************************
- * info.c : Playlist info management
- *****************************************************************************
- * Copyright (C) 1999-2004 VideoLAN
- * $Id$
- *
- * Authors: Clément 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;
-}
#include <vlc/vlc.h>
#include <vlc/input.h>
+#include "vlc_input.h"
#include "vlc_playlist.h"
static void GuessType( input_item_t *p_item);
if( p_item->input.i_type == ITEM_TYPE_UNKNOWN )
GuessType( &p_item->input );
- playlist_ItemCreateCategory( p_item, _("General") );
-
return p_item;
}
{
memcpy( psz_buffer, "--:--:--", sizeof("--:--:--") );
}
- playlist_ItemAddInfo( p_item, _("General") , _("Duration"),
- "%s", psz_buffer );
+ vlc_input_item_AddInfo( &p_item->input, _("General") , _("Duration"),
+ "%s", psz_buffer );
return VLC_SUCCESS;
}
}
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" ) );
}