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"