File indexing completed on 2024-05-05 04:51:42

0001 /*
0002     SPDX-FileCopyrightText: 2011 Michal Malek <michalm@jabster.pl>
0003     SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "k3baudiotracktrmlookupdialog.h"
0009 #include "k3bmusicbrainzjob.h"
0010 
0011 #include <config-k3b.h>
0012 
0013 #include "k3bbusywidget.h"
0014 #include "k3baudiotrack.h"
0015 #include "k3baudiofile.h"
0016 
0017 #include <KNotification>
0018 #include <KLocalizedString>
0019 #include <KIconLoader>
0020 #include <KMessageBox>
0021 
0022 #include <QDebug>
0023 #include <QEventLoop>
0024 #include <QTimer>
0025 #include <QApplication>
0026 #include <QDialogButtonBox>
0027 #include <QGridLayout>
0028 #include <QLabel>
0029 #include <QLayout>
0030 #include <QPushButton>
0031 
0032 
0033 K3b::AudioTrackTRMLookupDialog::AudioTrackTRMLookupDialog( QWidget* parent )
0034     : QDialog( parent ),
0035       m_loop( 0 )
0036 {
0037     setWindowTitle(i18n("MusicBrainz Query"));
0038     setModal(true);
0039     QGridLayout* grid = new QGridLayout( this );
0040 
0041     m_infoLabel = new QLabel( this );
0042     QLabel* pixLabel = new QLabel( this );
0043     pixLabel->setPixmap( KIconLoader::global()->loadIcon( "musicbrainz", KIconLoader::NoGroup, 64 ) );
0044     pixLabel->setScaledContents( false );
0045 
0046     m_busyWidget = new K3b::BusyWidget( this );
0047 
0048     QDialogButtonBox* buttonBox = new QDialogButtonBox( this );
0049     m_cancelButton = buttonBox->addButton( QDialogButtonBox::Cancel );
0050     connect( buttonBox, SIGNAL(rejected()), SLOT(reject()) );
0051 
0052     grid->addWidget( pixLabel, 0, 0, 2, 1 );
0053     grid->addWidget( m_infoLabel, 0, 1 );
0054     grid->addWidget( m_busyWidget, 1, 1 );
0055     grid->addWidget( buttonBox, 2, 0, 1, 2 );
0056 
0057     m_mbJob = new K3b::MusicBrainzJob( this );
0058     connect( m_mbJob, SIGNAL(infoMessage(QString,int)),
0059              this, SLOT(slotMbJobInfoMessage(QString,int)) );
0060     connect( m_mbJob, SIGNAL(finished(bool)), this, SLOT(slotMbJobFinished(bool)) );
0061     connect( m_mbJob, SIGNAL(trackFinished(K3b::AudioTrack*,bool)),
0062              this, SLOT(slotTrackFinished(K3b::AudioTrack*,bool)) );
0063 }
0064 
0065 
0066 K3b::AudioTrackTRMLookupDialog::~AudioTrackTRMLookupDialog()
0067 {
0068 }
0069 
0070 
0071 int K3b::AudioTrackTRMLookupDialog::lookup( const QList<K3b::AudioTrack*>& tracks )
0072 {
0073     m_mbJob->setTracks( tracks );
0074     m_mbJob->start();
0075 
0076     m_busyWidget->showBusy(true);
0077     setModal( true );
0078     show();
0079 
0080     QEventLoop loop;
0081     m_loop = &loop;
0082     loop.exec();
0083     m_loop = 0;
0084 
0085     return 0;
0086 }
0087 
0088 
0089 void K3b::AudioTrackTRMLookupDialog::slotMbJobInfoMessage( const QString& message, int )
0090 {
0091     m_infoLabel->setText( message );
0092 }
0093 
0094 
0095 void K3b::AudioTrackTRMLookupDialog::slotMbJobFinished( bool )
0096 {
0097     m_busyWidget->showBusy(false);
0098     hide();
0099     if( m_loop )
0100         m_loop->exit();
0101 }
0102 
0103 
0104 void K3b::AudioTrackTRMLookupDialog::reject()
0105 {
0106     m_cancelButton->setEnabled( false );
0107     m_mbJob->cancel();
0108 }
0109 
0110 
0111 void K3b::AudioTrackTRMLookupDialog::slotTrackFinished( K3b::AudioTrack* track, bool success )
0112 {
0113     if( !success )
0114         KNotification::event( "TrackDataNotFound",
0115                               i18n("Audio Project"),
0116                               i18n("Track %1 was not found in the MusicBrainz database.",
0117                                    track->trackNumber()) );
0118 }
0119 
0120 #include "moc_k3baudiotracktrmlookupdialog.cpp"