1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-04-22 08:52:12 +02:00

* Query-based CTOR for MetadataEditor.

This commit is contained in:
Christian Muehlhaeuser 2012-11-16 11:00:47 +01:00
parent 6ff68c314c
commit ed17f07355
2 changed files with 168 additions and 67 deletions

View File

@ -24,6 +24,7 @@
#include <QtCore/QFileInfo>
#include <QtCore/QFile>
#include "Source.h"
#include "Result.h"
#include "Artist.h"
#include "Album.h"
@ -38,102 +39,175 @@
#include "utils/Closure.h"
MetadataEditor::MetadataEditor( const Tomahawk::query_ptr& query, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent )
: QDialog( parent )
{
init( interface );
loadQuery( query );
}
MetadataEditor::MetadataEditor( const Tomahawk::result_ptr& result, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent )
: QDialog( parent )
, ui( new Ui::MetadataEditor )
, m_result( result )
, m_interface( interface )
, m_index( 0 )
{
ui->setupUi( this );
setWindowTitle( QString( result->track() + tr( " - Properties" ) ) );
setAttribute( Qt::WA_DeleteOnClose );
NewClosure( ui->buttonBox, SIGNAL( accepted() ),
this, SLOT( writeMetadata( bool ) ), true )->setAutoDelete( false );
connect( ui->buttonBox, SIGNAL( rejected() ), SLOT( close() ) );
connect( ui->forwardPushButton, SIGNAL( clicked() ), SLOT( loadNextResult() ) );
connect( ui->previousPushButton, SIGNAL( clicked() ), SLOT( loadPreviousResult() ) );
init( interface );
loadResult( result );
}
void
MetadataEditor::init( const Tomahawk::playlistinterface_ptr& interface )
{
ui = new Ui::MetadataEditor();
ui->setupUi( this );
setAttribute( Qt::WA_DeleteOnClose );
m_interface = interface;
m_index = 0;
m_editable = false;
NewClosure( ui->buttonBox, SIGNAL( accepted() ), this, SLOT( writeMetadata( bool ) ), true )->setAutoDelete( false );
connect( ui->buttonBox, SIGNAL( rejected() ), SLOT( close() ) );
connect( ui->forwardPushButton, SIGNAL( clicked() ), SLOT( loadNextResult() ) );
connect( ui->previousPushButton, SIGNAL( clicked() ), SLOT( loadPreviousResult() ) );
}
void
MetadataEditor::writeMetadata( bool closeDlg )
{
QFileInfo fi( QUrl( m_result->url() ).toLocalFile() );
bool changed = false;
QByteArray fileName = QFile::encodeName( fi.canonicalFilePath() );
const char *encodedName = fileName.constData();
TagLib::FileRef f( encodedName );
Tomahawk::Tag* tag = Tomahawk::Tag::fromFile( f );
if ( title() != m_result->track() )
if ( m_result )
{
tag->setTitle( title() );
m_result->setTrack( title() );
QFileInfo fi( QUrl( m_result->url() ).toLocalFile() );
changed = true;
}
bool changed = false;
QByteArray fileName = QFile::encodeName( fi.canonicalFilePath() );
const char *encodedName = fileName.constData();
Tomahawk::artist_ptr newArtist = Tomahawk::Artist::get( artist(), true );
if ( newArtist != m_result->artist() )
{
tag->setArtist( artist() );
m_result->setArtist( newArtist );
TagLib::FileRef f( encodedName );
Tomahawk::Tag* tag = Tomahawk::Tag::fromFile( f );
changed = true;
if ( title() != m_result->track() )
{
tDebug() << Q_FUNC_INFO << "Track changed" << title() << m_result->track();
}
tag->setTitle( title() );
m_result->setTrack( title() );
Tomahawk::album_ptr newAlbum = Tomahawk::Album::get( newArtist, album(), true );
if ( newAlbum != m_result->album() )
{
tag->setAlbum( album() );
m_result->setAlbum( newAlbum );
changed = true;
}
changed = true;
}
Tomahawk::artist_ptr newArtist = Tomahawk::Artist::get( artist(), true );
if ( newArtist != m_result->artist() )
{
tDebug() << Q_FUNC_INFO << "Artist changed" << artist() << m_result->artist();
if ( albumPos() != (int)m_result->albumpos() )
{
tag->setTrack( albumPos() );
m_result->setAlbumPos( albumPos() );
tag->setArtist( artist() );
m_result->setArtist( newArtist );
changed = true;
}
changed = true;
}
if ( year() != m_result->year() )
{
tag->setYear( year() );
m_result->setYear( year() );
Tomahawk::album_ptr newAlbum = Tomahawk::Album::get( newArtist, album(), true );
if ( newAlbum != m_result->album() )
{
tDebug() << Q_FUNC_INFO << "Album changed" << album() << newAlbum->id() << m_result->album()->name() << m_result->album()->id() << newAlbum.data() << m_result->album().data();
if ( newAlbum->id() != m_result->album()->id() )
{
tag->setAlbum( album() );
m_result->setAlbum( newAlbum );
changed = true;
}
changed = true;
}
else
Q_ASSERT( false );
}
if ( changed )
{
f.save();
// FIXME: Ugly workaround for the min value of 0
if ( albumPos() != 0 && albumPos() != (int)m_result->albumpos() )
{
tag->setTrack( albumPos() );
m_result->setAlbumPos( albumPos() );
m_editFiles.append( fileName );
m_result->doneEditing();
tDebug() << Q_FUNC_INFO << "Albumpos changed";
changed = true;
}
tDebug() << Q_FUNC_INFO << m_result->toString();
tDebug() << Q_FUNC_INFO << m_result->toQuery()->toString();
// FIXME: Ugly workaround for the min value of 1900
if ( year() != 1900 && year() != m_result->year() )
{
tag->setYear( year() );
m_result->setYear( year() );
tDebug() << Q_FUNC_INFO << "Year changed";
changed = true;
}
if ( changed )
{
f.save();
m_editFiles.append( fileName );
m_result->doneEditing();
tDebug() << Q_FUNC_INFO << m_result->toString();
tDebug() << Q_FUNC_INFO << m_result->toQuery()->toString();
}
}
if ( closeDlg )
{
ScanManager::instance()->runFileScan( m_editFiles, false );
if ( m_editFiles.count() )
ScanManager::instance()->runFileScan( m_editFiles, false );
close();
}
}
void
MetadataEditor::loadQuery( const Tomahawk::query_ptr& query )
{
if ( query.isNull() )
return;
if ( query->numResults() )
{
loadResult( query->results().first() );
return;
}
m_result = Tomahawk::result_ptr();
m_query = query;
setEditable( false );
setTitle( query->displayQuery()->track() );
setArtist( query->displayQuery()->artist() );
setAlbum( query->displayQuery()->album() );
setAlbumPos( query->displayQuery()->albumpos() );
setDuration( query->displayQuery()->duration() );
setYear( 0 );
setBitrate( 0 );
setFileName( QString() );
setFileSize( 0 );
setWindowTitle( QString( query->track() + " - " + tr( "Properties" ) ) );
if ( m_interface )
{
m_index = m_interface->indexOfQuery( query );
if ( m_index >= 0 )
enablePushButtons();
}
}
void
MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
{
@ -141,6 +215,8 @@ MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
return;
m_result = result;
setEditable( result->collection()->source()->isLocal() );
setTitle( result->track() );
setArtist( result->artist()->name() );
setAlbum( result->album()->name() );
@ -153,6 +229,8 @@ MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
setFileName( fi.fileName() );
setFileSize( TomahawkUtils::filesizeToString( fi.size() ) );
setWindowTitle( QString( result->track() + " - " + tr( "Properties" ) ) );
if ( m_interface )
{
m_index = m_interface->indexOfResult( result );
@ -185,8 +263,8 @@ MetadataEditor::loadNextResult()
m_index++;
if ( m_interface->itemAt( m_index )->numResults() )
loadResult( m_interface->itemAt( m_index )->results().first() );
if ( m_interface->itemAt( m_index ) )
loadQuery( m_interface->itemAt( m_index ) );
}
@ -197,8 +275,8 @@ MetadataEditor::loadPreviousResult()
m_index--;
if ( m_interface->itemAt( m_index )->numResults() )
loadResult( m_interface->itemAt( m_index )->results().first() );
if ( m_interface->itemAt( m_index ) )
loadQuery( m_interface->itemAt( m_index ) );
}
@ -263,3 +341,16 @@ MetadataEditor::setFileSize( const QString& size )
{
ui->fileSizeLineEdit->setText( size );
}
void
MetadataEditor::setEditable( bool editable )
{
ui->artistLineEdit->setReadOnly( !editable );
ui->albumLineEdit->setReadOnly( !editable );
ui->titleLineEdit->setReadOnly( !editable );
ui->albumPosSpinBox->setReadOnly( !editable );
ui->yearSpinBox->setReadOnly( !editable );
m_editable = editable;
}

View File

@ -24,20 +24,23 @@
#include <QtGui/QSpinBox>
#include "ui_MetadataEditor.h"
#include "Query.h"
#include "Result.h"
#include "Typedefs.h"
class QString;
class MetadataEditor : public QDialog
{
Q_OBJECT
public:
MetadataEditor( const Tomahawk::query_ptr& query, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent = 0 );
MetadataEditor( const Tomahawk::result_ptr& result, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent = 0 );
~MetadataEditor() {};
void init( const Tomahawk::playlistinterface_ptr& interface );
protected:
QString title() const { return ui->titleLineEdit->text(); }
QString artist() const { return ui->artistLineEdit->text(); }
@ -45,7 +48,9 @@ protected:
int albumPos() const { return ui->albumPosSpinBox->value(); }
int year() const { return ui->yearSpinBox->value(); }
int bitrate() const { return ui->bitrateSpinBox->value(); }
void loadResult( const Tomahawk::result_ptr& result );
void loadQuery( const Tomahawk::query_ptr& query );
private slots:
void writeMetadata( bool closeDlg = false );
@ -66,14 +71,19 @@ private slots:
void setFileName( const QString& fn );
void setFileSize( const QString& size );
void setEditable( bool editable );
private:
Ui::MetadataEditor* ui;
Tomahawk::result_ptr m_result;
Tomahawk::query_ptr m_query;
Tomahawk::playlistinterface_ptr m_interface;
QStringList m_editFiles;
int m_index;
bool m_editable;
};
#endif // METADATAEDITOR_H