File indexing completed on 2024-05-12 04:51:35

0001 /*
0002     SPDX-FileCopyrightText: 2003-2009 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl>
0004     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "k3baudioprojectcddbplugin.h"
0010 
0011 #include <config-k3b.h>
0012 
0013 // the k3b stuff we need
0014 #include "k3bcore.h"
0015 #include "k3bglobals.h"
0016 #include "k3baudiodoc.h"
0017 #include "k3baudiotrack.h"
0018 #include "k3btoc.h"
0019 #include "k3btrack.h"
0020 #include "k3bmixeddoc.h"
0021 #include "k3bmsf.h"
0022 #include "k3bcddb.h"
0023 #include "k3bplugin_i18n.h"
0024 
0025 #include <KConfig>
0026 #include <KMessageBox>
0027 
0028 #include <QDebug>
0029 #include <QString>
0030 #include <QProgressDialog>
0031 
0032 #include <KCDDB/CDInfo>
0033 
0034 
0035 K_PLUGIN_CLASS_WITH_JSON(K3bAudioProjectCddbPlugin , "k3baudioprojectcddbplugin.json")
0036 
0037 
0038 
0039 K3bAudioProjectCddbPlugin::K3bAudioProjectCddbPlugin( QObject* parent, const QVariantList& )
0040     : K3b::ProjectPlugin( K3b::Doc::AudioProject, false, parent )
0041 {
0042     setText( i18n("Query CDDB") );
0043     setToolTip( i18n("Query a CDDB entry for the current audio project.") );
0044     setIcon( QIcon::fromTheme( "view-refresh" ) );
0045 }
0046 
0047 
0048 K3bAudioProjectCddbPlugin::~K3bAudioProjectCddbPlugin()
0049 {
0050 }
0051 
0052 
0053 void K3bAudioProjectCddbPlugin::activate( K3b::Doc* doc, QWidget* parent )
0054 {
0055     if( K3b::MixedDoc* mixedDoc = dynamic_cast<K3b::MixedDoc*>( doc ) )
0056         m_doc = mixedDoc->audioDoc();
0057     else
0058         m_doc = dynamic_cast<K3b::AudioDoc*>( doc );
0059 
0060     m_parentWidget = parent;
0061     m_canceled = false;
0062 
0063     if( !m_doc || m_doc->numOfTracks() == 0 ) {
0064         KMessageBox::error( parent, i18n("Please select a non-empty audio project for a CDDB query.") );
0065     }
0066     else {
0067         if( !m_progress ) {
0068             m_progress.reset( new QProgressDialog( i18n("Query CDDB"), i18n("Cancel"), 0, 0, parent ) );
0069             m_progress->setWindowTitle( i18n("Audio Project") );
0070         } else {
0071             m_progress->reset();
0072         }
0073 
0074         K3b::CDDB::CDDBJob* job = K3b::CDDB::CDDBJob::queryCddb( m_doc->toToc() );
0075         connect( job, SIGNAL(result(KJob*)),
0076                  this, SLOT(slotCddbQueryFinished(KJob*)) );
0077 
0078         m_progress->exec();
0079     }
0080 }
0081 
0082 
0083 void K3bAudioProjectCddbPlugin::slotCddbQueryFinished( KJob* job )
0084 {
0085     if( !m_progress->wasCanceled() ) {
0086 
0087         if( !job->error() && m_doc ) {
0088             K3b::CDDB::CDDBJob* cddbJob = dynamic_cast<K3b::CDDB::CDDBJob*>( job );
0089             KCDDB::CDInfo cddbInfo = cddbJob->cddbResult();
0090 
0091             // save the entry to the doc
0092             m_doc->setTitle( cddbInfo.get( KCDDB::Title ).toString() );
0093             m_doc->setPerformer( cddbInfo.get( KCDDB::Artist ).toString() );
0094             m_doc->setCdTextMessage( cddbInfo.get( KCDDB::Comment ).toString() );
0095 
0096             int i = 0;
0097             for( K3b::AudioTrack* track = m_doc->firstTrack(); track; track = track->next() ) {
0098                 KCDDB::TrackInfo info = cddbInfo.track( i );
0099                 track->setTitle( info.get( KCDDB::Title ).toString() );
0100                 track->setPerformer( info.get( KCDDB::Artist ).toString() );
0101                 track->setCdTextMessage( info.get( KCDDB::Comment ).toString() );
0102 
0103                 ++i;
0104             }
0105 
0106             // and enable cd-text
0107             m_doc->writeCdText( true );
0108         }
0109         else {
0110             KMessageBox::information( m_parentWidget, job->errorString(), i18n("CDDB error") );
0111         }
0112     }
0113 
0114     // make sure the progress dialog does not get deleted by it's parent
0115     m_progress.reset();
0116     m_doc.clear();
0117     m_parentWidget.clear();
0118 }
0119 
0120 #include "k3baudioprojectcddbplugin.moc"
0121 
0122 #include "moc_k3baudioprojectcddbplugin.cpp"