1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-04 13:17:34 +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/QFileInfo>
#include <QtCore/QFile> #include <QtCore/QFile>
#include "Source.h"
#include "Result.h" #include "Result.h"
#include "Artist.h" #include "Artist.h"
#include "Album.h" #include "Album.h"
@@ -38,31 +39,49 @@
#include "utils/Closure.h" #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 ) MetadataEditor::MetadataEditor( const Tomahawk::result_ptr& result, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent )
: QDialog( parent ) : QDialog( parent )
, ui( new Ui::MetadataEditor )
, m_result( result )
, m_interface( interface )
, m_index( 0 )
{ {
ui->setupUi( this ); init( interface );
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() ) );
loadResult( result ); 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 void
MetadataEditor::writeMetadata( bool closeDlg ) MetadataEditor::writeMetadata( bool closeDlg )
{ {
if ( m_result )
{
QFileInfo fi( QUrl( m_result->url() ).toLocalFile() ); QFileInfo fi( QUrl( m_result->url() ).toLocalFile() );
bool changed = false; bool changed = false;
@@ -74,6 +93,8 @@ MetadataEditor::writeMetadata( bool closeDlg )
if ( title() != m_result->track() ) if ( title() != m_result->track() )
{ {
tDebug() << Q_FUNC_INFO << "Track changed" << title() << m_result->track();
tag->setTitle( title() ); tag->setTitle( title() );
m_result->setTrack( title() ); m_result->setTrack( title() );
@@ -83,35 +104,46 @@ MetadataEditor::writeMetadata( bool closeDlg )
Tomahawk::artist_ptr newArtist = Tomahawk::Artist::get( artist(), true ); Tomahawk::artist_ptr newArtist = Tomahawk::Artist::get( artist(), true );
if ( newArtist != m_result->artist() ) if ( newArtist != m_result->artist() )
{ {
tDebug() << Q_FUNC_INFO << "Artist changed" << artist() << m_result->artist();
tag->setArtist( artist() ); tag->setArtist( artist() );
m_result->setArtist( newArtist ); m_result->setArtist( newArtist );
changed = true; changed = true;
} }
Tomahawk::album_ptr newAlbum = Tomahawk::Album::get( newArtist, album(), true ); Tomahawk::album_ptr newAlbum = Tomahawk::Album::get( newArtist, album(), true );
if ( newAlbum != m_result->album() ) 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() ); tag->setAlbum( album() );
m_result->setAlbum( newAlbum ); m_result->setAlbum( newAlbum );
changed = true; changed = true;
} }
else
Q_ASSERT( false );
}
if ( albumPos() != (int)m_result->albumpos() ) // FIXME: Ugly workaround for the min value of 0
if ( albumPos() != 0 && albumPos() != (int)m_result->albumpos() )
{ {
tag->setTrack( albumPos() ); tag->setTrack( albumPos() );
m_result->setAlbumPos( albumPos() ); m_result->setAlbumPos( albumPos() );
tDebug() << Q_FUNC_INFO << "Albumpos changed";
changed = true; changed = true;
} }
if ( year() != m_result->year() ) // FIXME: Ugly workaround for the min value of 1900
if ( year() != 1900 && year() != m_result->year() )
{ {
tag->setYear( year() ); tag->setYear( year() );
m_result->setYear( year() ); m_result->setYear( year() );
tDebug() << Q_FUNC_INFO << "Year changed";
changed = true; changed = true;
} }
@@ -125,15 +157,57 @@ MetadataEditor::writeMetadata( bool closeDlg )
tDebug() << Q_FUNC_INFO << m_result->toString(); tDebug() << Q_FUNC_INFO << m_result->toString();
tDebug() << Q_FUNC_INFO << m_result->toQuery()->toString(); tDebug() << Q_FUNC_INFO << m_result->toQuery()->toString();
} }
}
if ( closeDlg ) if ( closeDlg )
{ {
if ( m_editFiles.count() )
ScanManager::instance()->runFileScan( m_editFiles, false ); ScanManager::instance()->runFileScan( m_editFiles, false );
close(); 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 void
MetadataEditor::loadResult( const Tomahawk::result_ptr& result ) MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
{ {
@@ -141,6 +215,8 @@ MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
return; return;
m_result = result; m_result = result;
setEditable( result->collection()->source()->isLocal() );
setTitle( result->track() ); setTitle( result->track() );
setArtist( result->artist()->name() ); setArtist( result->artist()->name() );
setAlbum( result->album()->name() ); setAlbum( result->album()->name() );
@@ -153,6 +229,8 @@ MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
setFileName( fi.fileName() ); setFileName( fi.fileName() );
setFileSize( TomahawkUtils::filesizeToString( fi.size() ) ); setFileSize( TomahawkUtils::filesizeToString( fi.size() ) );
setWindowTitle( QString( result->track() + " - " + tr( "Properties" ) ) );
if ( m_interface ) if ( m_interface )
{ {
m_index = m_interface->indexOfResult( result ); m_index = m_interface->indexOfResult( result );
@@ -185,8 +263,8 @@ MetadataEditor::loadNextResult()
m_index++; m_index++;
if ( m_interface->itemAt( m_index )->numResults() ) if ( m_interface->itemAt( m_index ) )
loadResult( m_interface->itemAt( m_index )->results().first() ); loadQuery( m_interface->itemAt( m_index ) );
} }
@@ -197,8 +275,8 @@ MetadataEditor::loadPreviousResult()
m_index--; m_index--;
if ( m_interface->itemAt( m_index )->numResults() ) if ( m_interface->itemAt( m_index ) )
loadResult( m_interface->itemAt( m_index )->results().first() ); loadQuery( m_interface->itemAt( m_index ) );
} }
@@ -263,3 +341,16 @@ MetadataEditor::setFileSize( const QString& size )
{ {
ui->fileSizeLineEdit->setText( 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 <QtGui/QSpinBox>
#include "ui_MetadataEditor.h" #include "ui_MetadataEditor.h"
#include "Query.h"
#include "Result.h" #include "Result.h"
#include "Typedefs.h" #include "Typedefs.h"
class QString; class QString;
class MetadataEditor : public QDialog class MetadataEditor : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: 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( const Tomahawk::result_ptr& result, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent = 0 );
~MetadataEditor() {}; ~MetadataEditor() {};
void init( const Tomahawk::playlistinterface_ptr& interface );
protected: protected:
QString title() const { return ui->titleLineEdit->text(); } QString title() const { return ui->titleLineEdit->text(); }
QString artist() const { return ui->artistLineEdit->text(); } QString artist() const { return ui->artistLineEdit->text(); }
@@ -45,7 +48,9 @@ protected:
int albumPos() const { return ui->albumPosSpinBox->value(); } int albumPos() const { return ui->albumPosSpinBox->value(); }
int year() const { return ui->yearSpinBox->value(); } int year() const { return ui->yearSpinBox->value(); }
int bitrate() const { return ui->bitrateSpinBox->value(); } int bitrate() const { return ui->bitrateSpinBox->value(); }
void loadResult( const Tomahawk::result_ptr& result ); void loadResult( const Tomahawk::result_ptr& result );
void loadQuery( const Tomahawk::query_ptr& query );
private slots: private slots:
void writeMetadata( bool closeDlg = false ); void writeMetadata( bool closeDlg = false );
@@ -66,14 +71,19 @@ private slots:
void setFileName( const QString& fn ); void setFileName( const QString& fn );
void setFileSize( const QString& size ); void setFileSize( const QString& size );
void setEditable( bool editable );
private: private:
Ui::MetadataEditor* ui; Ui::MetadataEditor* ui;
Tomahawk::result_ptr m_result; Tomahawk::result_ptr m_result;
Tomahawk::query_ptr m_query;
Tomahawk::playlistinterface_ptr m_interface; Tomahawk::playlistinterface_ptr m_interface;
QStringList m_editFiles; QStringList m_editFiles;
int m_index; int m_index;
bool m_editable;
}; };
#endif // METADATAEDITOR_H #endif // METADATAEDITOR_H