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:
@@ -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;
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user