static int vlclua_input_metas_internal( lua_State *L, input_item_t *p_item ) { if( !p_item ) { lua_pushnil( L ); return 1; } lua_newtable( L ); char *psz_name; const char *psz_meta; psz_name = input_item_GetName( p_item ); lua_pushstring( L, psz_name ); lua_setfield( L, -2, "filename" ); free( psz_name ); #define PUSH_META( n, m ) \ psz_meta = vlc_meta_Get( p_item->p_meta, vlc_meta_ ## n ); \ lua_pushstring( L, psz_meta ); \ lua_setfield( L, -2, m ) vlc_mutex_lock(&p_item->lock); if (p_item->p_meta) { PUSH_META( Title, "title" ); PUSH_META( Artist, "artist" ); PUSH_META( Genre, "genre" ); PUSH_META( Copyright, "copyright" ); PUSH_META( Album, "album" ); PUSH_META( TrackNumber, "track_number" ); PUSH_META( Description, "description" ); PUSH_META( Rating, "rating" ); PUSH_META( Date, "date" ); PUSH_META( Setting, "setting" ); PUSH_META( URL, "url" ); PUSH_META( Language, "language" ); PUSH_META( NowPlaying, "now_playing" ); PUSH_META( Publisher, "publisher" ); PUSH_META( EncodedBy, "encoded_by" ); PUSH_META( ArtworkURL, "artwork_url" ); PUSH_META( TrackID, "track_id" ); #undef PUSH_META char **names = vlc_meta_CopyExtraNames(p_item->p_meta); for(int i = 0; names[i]; i++) { const char *meta = vlc_meta_GetExtra(p_item->p_meta, names[i]); lua_pushstring( L, meta ); lua_setfield( L, -2, names[i] ); free(names[i]); } free(names); } vlc_mutex_unlock(&p_item->lock); return 1; }
/** * Update the Extra Metadata from p_meta->i_extras **/ void ExtraMetaPanel::update( input_item_t *p_item ) { if( !p_item ) { clear(); return; } QList<QTreeWidgetItem *> items; extraMetaTree->clear(); vlc_mutex_lock( &p_item->lock ); vlc_meta_t *p_meta = p_item->p_meta; if( !p_meta ) { vlc_mutex_unlock( &p_item->lock ); return; } const char *psz_disc_number = vlc_meta_Get( p_meta, vlc_meta_DiscNumber); if( psz_disc_number ) { QStringList tempItem; tempItem.append( VLC_META_DISCNUMBER ); tempItem.append( qfu( psz_disc_number ) ); items.append( new QTreeWidgetItem ( extraMetaTree, tempItem ) ); } char ** ppsz_allkey = vlc_meta_CopyExtraNames( p_meta); for( int i = 0; ppsz_allkey[i] ; i++ ) { const char * psz_value = vlc_meta_GetExtra( p_meta, ppsz_allkey[i] ); QStringList tempItem; tempItem.append( qfu( ppsz_allkey[i] ) + " : "); tempItem.append( qfu( psz_value ) ); items.append( new QTreeWidgetItem ( extraMetaTree, tempItem ) ); free( ppsz_allkey[i] ); } vlc_mutex_unlock( &p_item->lock ); free( ppsz_allkey ); extraMetaTree->addTopLevelItems( items ); extraMetaTree->resizeColumnToContents( 0 ); }