ADD_META_B( VLC_META_ENCODED_BY, publisher_text );
ADD_META_B( VLC_META_DESCRIPTION, description_text ); // Comment Two lines?
+ QPushButton *write = new QPushButton( qtr( "&Write" ) );
+ l->addWidget( write, line, 0 );
+
+ BUTTONACT( write, saveMeta() );
+
/* ADD_META( TRACKID) DO NOT SHOW it */
/* ADD_URI - DO not show it, done outside */
{
}
+void MetaPanel::saveMeta()
+{
+ playlist_t *p_playlist;
+
+ meta_export_t p_export;
+ p_export.p_item = p_input;
+
+ /* we can write meta data only in a file */
+ if( ( p_input->i_type == ITEM_TYPE_AFILE ) || \
+ ( p_input->i_type == ITEM_TYPE_VFILE ) )
+ /* some audio files are detected as video files */
+ {
+ char *psz_uri = p_input->psz_uri;
+ if( !strncmp( psz_uri, "file://", 7 ) )
+ psz_uri += 7; /* strlen("file://") = 7 */
+
+ p_export.psz_file = strndup( psz_uri, PATH_MAX );
+ }
+ else
+ return;
+
+ /* now we read the modified meta data */
+ free( p_input->p_meta->psz_artist );
+ p_input->p_meta->psz_artist = strdup( artist_text->text().toUtf8() );
+ free( p_input->p_meta->psz_album );
+ p_input->p_meta->psz_album = strdup( collection_text->text().toUtf8() );
+ free( p_input->p_meta->psz_genre );
+ p_input->p_meta->psz_genre = strdup( genre_text->text().toUtf8() );
+ free( p_input->p_meta->psz_date );
+ p_input->p_meta->psz_date = (char*) malloc(5);
+ snprintf( p_input->p_meta->psz_date, 5, "%d", date_text->value() );
+ free( p_input->p_meta->psz_tracknum );
+ p_input->p_meta->psz_tracknum = (char*) malloc(5);
+ snprintf( p_input->p_meta->psz_tracknum, 5, "%d", seqnum_text->value() );
+ free( p_input->p_meta->psz_title );
+ p_input->p_meta->psz_title = strdup( title_text->text().toUtf8() );
+
+ p_playlist = pl_Yield( p_intf );
+
+ 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;
+ pl_Release( p_playlist );
+}
+
void MetaPanel::update( input_item_t *p_item )
{
char *psz_meta;
return VLC_EGENERIC;
}
+#define SET(a,b) if(b) tag->set##a( b );
+
static int WriteMeta( vlc_object_t *p_this )
{
- input_item_t *p_item = (input_item_t *)p_this;
-
- char *psz_uri = p_item->psz_uri;
- /* we can write meta data only in a file */
- if( !strncmp( psz_uri, "file://", 7 ) )
- psz_uri += 7;
- /* if the file is specified with its path, not prefixed with file:// */
- else if( strncmp( psz_uri, "/", 1 ) )
- return VLC_EGENERIC;
+ playlist_t *p_playlist = (playlist_t *)p_this;
+ meta_export_t *p_export = (meta_export_t *)p_playlist->p_private;
+ input_item_t *p_item = p_export->p_item;
- TagLib::FileRef f( psz_uri );
+ TagLib::FileRef f( p_export->psz_file );
if( !f.isNull() && f.tag() )
{
TagLib::Tag *tag = f.tag();
- tag->setArtist( p_item->p_meta->psz_artist );
+ SET( Artist, p_item->p_meta->psz_artist );
if( p_item->p_meta->psz_title )
tag->setTitle( p_item->p_meta->psz_title );
else
tag->setTitle( p_item->psz_name );
- tag->setAlbum( p_item->p_meta->psz_album );
- tag->setGenre( p_item->p_meta->psz_genre );
+ SET( Album, p_item->p_meta->psz_album );
+ SET( Genre, p_item->p_meta->psz_genre );
if( p_item->p_meta->psz_date )
tag->setYear( atoi( p_item->p_meta->psz_date ) );
if( p_item->p_meta->psz_tracknum )
f.save();
return VLC_SUCCESS;
}
+ msg_Err( p_this, "File %s can't be opened for tag writing\n",
+ p_export->psz_file );
return VLC_EGENERIC;
}