+ if( !p_item ) goto error;
+
+ meta_export_t p_export;
+ p_export.p_item = p_item;
+
+ /* we can write meta data only in a file */
+ vlc_mutex_lock( &p_item->lock );
+ int i_type = p_item->i_type;
+ vlc_mutex_unlock( &p_item->lock );
+
+ if( i_type != ITEM_TYPE_FILE )
+ goto error;
+
+ char *psz_uri_orig = input_item_GetURI( p_item );
+ char *psz_uri = psz_uri_orig;
+ if( !strncmp( psz_uri, "file://", 7 ) )
+ psz_uri += 7; /* strlen("file://") = 7 */
+
+ p_export.psz_file = strndup( psz_uri, PATH_MAX );
+ free( psz_uri_orig );
+
+ #define utf8( o_blub ) \
+ [[o_blub stringValue] UTF8String]
+
+ input_item_SetName( p_item, utf8( o_title_txt ) );
+ input_item_SetTitle( p_item, utf8( o_title_txt ) );
+ input_item_SetArtist( p_item, utf8( o_author_txt ) );
+ input_item_SetAlbum( p_item, utf8( o_collection_txt ) );
+ input_item_SetGenre( p_item, utf8( o_genre_txt ) );
+ input_item_SetTrackNum( p_item, utf8( o_seqNum_txt ) );
+ input_item_SetDate( p_item, utf8( o_date_txt ) );
+ input_item_SetCopyright( p_item, utf8( o_copyright_txt ) );
+ input_item_SetPublisher( p_item, utf8( o_publisher_txt ) );
+ input_item_SetDescription( p_item, utf8( o_description_txt ) );
+ input_item_SetLanguage( p_item, utf8( o_language_txt ) );
+
+ PL_LOCK;
+ p_playlist->p_private = &p_export;
+
+ module_t *p_mod = module_Need( p_playlist, "meta writer", NULL, 0 );
+ if( p_mod )
+ module_Unneed( p_playlist, p_mod );
+ PL_UNLOCK;
+
+ val.b_bool = true;
+ var_Set( p_playlist, "intf-change", val );
+ [self updatePanelWithItem: p_item];
+
+ pl_Release( VLCIntf );
+ [o_saveMetaData_btn setEnabled: NO];
+ return;
+
+error:
+ pl_Release( VLCIntf );
+ NSRunAlertPanel(_NS("Error while saving meta"),
+ _NS("Impossible to save the meta data."),
+ _NS("OK"), nil, nil);