diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-10-10 11:30:40 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-10-10 11:30:40 +0000 |
| commit | 32dc2e325f765da1292d255cb937c3ad02ae0774 (patch) | |
| tree | 6e8d0f421011089061987eb9911783360517d9c5 /src/plugins/General/rgscan/rgscandialog.cpp | |
| parent | bc573bf071708d28a97be273b75d313b23e2a85a (diff) | |
| download | qmmp-32dc2e325f765da1292d255cb937c3ad02ae0774.tar.gz qmmp-32dc2e325f765da1292d255cb937c3ad02ae0774.tar.bz2 qmmp-32dc2e325f765da1292d255cb937c3ad02ae0774.zip | |
rgscan: added error handling
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3770 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/rgscan/rgscandialog.cpp')
| -rw-r--r-- | src/plugins/General/rgscan/rgscandialog.cpp | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/src/plugins/General/rgscan/rgscandialog.cpp b/src/plugins/General/rgscan/rgscandialog.cpp index 79e213a20..57ca145f4 100644 --- a/src/plugins/General/rgscan/rgscandialog.cpp +++ b/src/plugins/General/rgscan/rgscandialog.cpp @@ -43,6 +43,9 @@ RGScanDialog::RGScanDialog(QList <PlayListTrack *> tracks, QWidget *parent) : Q if(track->length() == 0 || track->url().contains("://")) continue; + if(!track->url().toLower().endsWith(".mp3")) + continue; + QString text = formatter.parse(track); QTableWidgetItem *item = new QTableWidgetItem(text); item->setData(Qt::UserRole, track->url()); @@ -71,9 +74,15 @@ void RGScanDialog::on_calculateButton_clicked() { QString url = m_ui.tableWidget->item(i, 0)->data(Qt::UserRole).toString(); RGScaner *scaner = new RGScaner(); - m_scaners.append(scaner); - scaner->prepare(url); + + if(!scaner->prepare(url)) + { + m_ui.tableWidget->setItem(i, 2, new QTableWidgetItem(tr("Error"))); + delete scaner; + continue; + } scaner->setAutoDelete(false); + m_scanners.append(scaner); connect(scaner, SIGNAL(progress(int)), m_ui.tableWidget->cellWidget(i, 1), SLOT(setValue(int))); connect(scaner, SIGNAL(finished(QString)), SLOT(onScanFinished(QString))); QThreadPool::globalInstance()->start(scaner); @@ -82,19 +91,24 @@ void RGScanDialog::on_calculateButton_clicked() void RGScanDialog::onScanFinished(QString url) { + for(int i = 0; i < m_ui.tableWidget->rowCount(); ++i) { if(url != m_ui.tableWidget->item(i, 0)->data(Qt::UserRole).toString()) continue; - m_ui.tableWidget->setItem(i, 2, new QTableWidgetItem(tr("%1 dB").arg(m_scaners.at(i)->gain()))); - m_ui.tableWidget->setItem(i, 4, new QTableWidgetItem(QString::number(m_scaners.at(i)->peak()))); + RGScaner *scanner = findScannerByUrl(url); + if(!scanner) + qFatal("RGScanDialog: unable to find scanner by URL!"); + m_ui.tableWidget->setItem(i, 2, new QTableWidgetItem(tr("%1 dB").arg(scanner->gain()))); + m_ui.tableWidget->setItem(i, 4, new QTableWidgetItem(QString::number(scanner->peak()))); + break; } bool stopped = true; - foreach (RGScaner *scaner, m_scaners) + foreach (RGScaner *scanner, m_scanners) { - if(scaner->isRunning()) + if(scanner->isRunning()) stopped = false; } @@ -105,15 +119,15 @@ void RGScanDialog::onScanFinished(QString url) double album_peak = 0.; - GainHandle_t **a = (GainHandle_t **) malloc(m_scaners.count()*sizeof(GainHandle_t *)); + GainHandle_t **a = (GainHandle_t **) malloc(m_scanners.count()*sizeof(GainHandle_t *)); - for(int i = 0; i < m_scaners.count(); ++i) + for(int i = 0; i < m_scanners.count(); ++i) { - a[i] = m_scaners.at(i)->handle(); - album_peak = qMax(m_scaners.at(i)->peak(), album_peak); + a[i] = m_scanners.at(i)->handle(); + album_peak = qMax(m_scanners.at(i)->peak(), album_peak); } - double album_gain = GetAlbumGain(a, m_scaners.count()); + double album_gain = GetAlbumGain(a, m_scanners.count()); free(a); for(int i = 0; i < m_ui.tableWidget->rowCount(); ++i) @@ -122,8 +136,8 @@ void RGScanDialog::onScanFinished(QString url) m_ui.tableWidget->setItem(i, 5, new QTableWidgetItem(QString::number(album_peak))); } - qDeleteAll(m_scaners); - m_scaners.clear(); + qDeleteAll(m_scanners); + m_scanners.clear(); m_ui.writeButton->setEnabled(true); } @@ -138,13 +152,23 @@ void RGScanDialog::reject() void RGScanDialog::stop() { - if(m_scaners.isEmpty()) + if(m_scanners.isEmpty()) return; - foreach (RGScaner *scaner, m_scaners) + foreach (RGScaner *scaner, m_scanners) { scaner->stop(); } QThreadPool::globalInstance()->waitForDone(); - qDeleteAll(m_scaners); - m_scaners.clear(); + qDeleteAll(m_scanners); + m_scanners.clear(); +} + +RGScaner *RGScanDialog::findScannerByUrl(const QString &url) +{ + foreach (RGScaner *scanner, m_scanners) + { + if(scanner->url() == url) + return scanner; + } + return 0; } |
