From 4251fd43315c176223764ed568e0a77cffae7571 Mon Sep 17 00:00:00 2001 From: asiviero Date: Mon, 3 Feb 2014 22:40:56 -0200 Subject: [PATCH 1/9] Checks for CD before opening window (addresses #4165) --- src/ui/mainwindow.cpp | 3 ++- src/ui/ripcd.cpp | 45 +++++++++++++++++++++---------------------- src/ui/ripcd.h | 3 ++- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 327471255..142fb1e3d 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1684,7 +1684,8 @@ void MainWindow::OpenRipCD() { if (!rip_cd_) { rip_cd_.reset(new RipCD); } - if(rip_cd_->CDIOIsValid()) { + if(rip_cd_->CheckCDIOIsValid()) { + rip_cd_->BuildTrackListTable(); rip_cd_->show(); } else { QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Failed reading CD drive")); diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index 60f0f665e..ff9813758 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -117,28 +117,6 @@ RipCD::RipCD(QWidget* parent) : setWindowTitle(tr("Rip CD")); AddDestinationDirectory(QDir::homePath()); - cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); - if(!cdio_) { - qLog(Error) << "Failed to read CD drive"; - return; - } else { - i_tracks_ = cdio_get_num_tracks(cdio_); - ui_->tableWidget->setRowCount(i_tracks_); - for (int i = 1; i <= i_tracks_; i++) { - QCheckBox *checkbox_i = new QCheckBox(ui_->tableWidget); - checkbox_i->setCheckState(Qt::Checked); - checkboxes_.append(checkbox_i); - ui_->tableWidget->setCellWidget(i - 1, kCheckboxColumn, checkbox_i); - ui_->tableWidget->setCellWidget(i - 1, kTrackNumberColumn, - new QLabel(QString::number(i))); - QString track_title = QString("Track %1").arg(i); - QLineEdit *line_edit_track_title_i = new QLineEdit(track_title, - ui_->tableWidget); - track_names_.append(line_edit_track_title_i); - ui_->tableWidget->setCellWidget(i - 1, kTrackTitleColumn, - line_edit_track_title_i); - } - } // Get presets QList presets = Transcoder::GetAllPresets(); qSort(presets.begin(), presets.end(), ComparePresetsByName); @@ -418,7 +396,8 @@ void RipCD::Cancel() { SetWorking(false); } -bool RipCD::CDIOIsValid() const { +bool RipCD::CheckCDIOIsValid() { + cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); return (cdio_); } @@ -458,3 +437,23 @@ void RipCD::RemoveTemporaryDirectory() { Utilities::RemoveRecursive(temporary_directory_); temporary_directory_.clear(); } + +void RipCD::BuildTrackListTable() { + ui_->tableWidget->clear(); + i_tracks_ = cdio_get_num_tracks(cdio_); + ui_->tableWidget->setRowCount(i_tracks_); + for (int i = 1; i <= i_tracks_; i++) { + QCheckBox *checkbox_i = new QCheckBox(ui_->tableWidget); + checkbox_i->setCheckState(Qt::Checked); + checkboxes_.append(checkbox_i); + ui_->tableWidget->setCellWidget(i - 1, kCheckboxColumn, checkbox_i); + ui_->tableWidget->setCellWidget(i - 1, kTrackNumberColumn, + new QLabel(QString::number(i))); + QString track_title = QString("Track %1").arg(i); + QLineEdit *line_edit_track_title_i = new QLineEdit(track_title, + ui_->tableWidget); + track_names_.append(line_edit_track_title_i); + ui_->tableWidget->setCellWidget(i - 1, kTrackTitleColumn, + line_edit_track_title_i); + } +} diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index 6f134639f..e46e1aaa8 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -36,7 +36,8 @@ class RipCD: public QDialog { public: explicit RipCD(QWidget* parent = 0); ~RipCD(); - bool CDIOIsValid() const; + bool CheckCDIOIsValid(); + void BuildTrackListTable(); private: static const char* kSettingsGroup; From d88c1fad04ef1021f9ee38074e7cae2d0c309891 Mon Sep 17 00:00:00 2001 From: asiviero Date: Mon, 3 Feb 2014 23:51:25 -0200 Subject: [PATCH 2/9] Reset progress bar after cancel is pressed --- src/ui/ripcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index ff9813758..db5849e93 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -213,7 +213,6 @@ void RipCD::ThreadClickedRipButton() { // Set up progress bar emit(SignalUpdateProgress()); - for (int i = 1; i <= i_tracks_; i++) { if (!checkboxes_.value(i - 1)->isChecked()) { continue; @@ -391,6 +390,7 @@ void RipCD::AddDestinationDirectory(QString dir) { } void RipCD::Cancel() { + ui_->progress_bar->setValue(0); transcoder_->Cancel(); RemoveTemporaryDirectory(); SetWorking(false); From 62d919c1b5c296a4bbd177c3b38f31ab87f4274a Mon Sep 17 00:00:00 2001 From: asiviero Date: Tue, 4 Feb 2014 23:29:39 -0200 Subject: [PATCH 3/9] Fixing segfaults, checking for cd change on the fly --- src/ui/mainwindow.cpp | 1 - src/ui/ripcd.cpp | 27 +++++++++++++++++++++++---- src/ui/ripcd.h | 2 ++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 142fb1e3d..098380384 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1685,7 +1685,6 @@ void MainWindow::OpenRipCD() { rip_cd_.reset(new RipCD); } if(rip_cd_->CheckCDIOIsValid()) { - rip_cd_->BuildTrackListTable(); rip_cd_->show(); } else { QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Failed reading CD drive")); diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index db5849e93..e5383c650 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -75,6 +76,7 @@ RipCD::RipCD(QWidget* parent) : ui_(new Ui_RipCD) { + cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); // Init ui_->setupUi(this); @@ -146,6 +148,7 @@ RipCD::RipCD(QWidget* parent) : RipCD::~RipCD() { delete ui_; + cdio_destroy(cdio_); } @@ -203,22 +206,19 @@ int RipCD::NumTracksToRip() { } void RipCD::ThreadClickedRipButton() { - temporary_directory_ = Utilities::MakeTempDir() + "/"; - finished_success_ = 0; finished_failed_ = 0; ui_->progress_bar->setMaximum(NumTracksToRip() * 2 * 100); // Set up progress bar emit(SignalUpdateProgress()); - + tracks_to_rip_.clear(); for (int i = 1; i <= i_tracks_; i++) { if (!checkboxes_.value(i - 1)->isChecked()) { continue; } tracks_to_rip_.append(i); - QString filename = temporary_directory_ + ParseFileFormatString(ui_->format_filename->text(), i) + ".wav"; QFile *destination_file = new QFile(filename); @@ -304,6 +304,16 @@ void RipCD::ThreadedTranscoding() { } void RipCD::ClickedRipButton() { + if((cdio_) && cdio_get_media_changed(cdio_)) { + QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Media has changed. Reloading")); + cdio_fail.exec(); + if(CheckCDIOIsValid()) { + BuildTrackListTable(); + } else { + ui_->tableWidget->clear(); + } + return; + } SetWorking(true); QtConcurrent::run(this, &RipCD::ThreadClickedRipButton); } @@ -397,6 +407,9 @@ void RipCD::Cancel() { } bool RipCD::CheckCDIOIsValid() { + if((cdio_)) { + cdio_destroy(cdio_); + } cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); return (cdio_); } @@ -440,6 +453,8 @@ void RipCD::RemoveTemporaryDirectory() { void RipCD::BuildTrackListTable() { ui_->tableWidget->clear(); + checkboxes_.clear(); + track_names_.clear(); i_tracks_ = cdio_get_num_tracks(cdio_); ui_->tableWidget->setRowCount(i_tracks_); for (int i = 1; i <= i_tracks_; i++) { @@ -457,3 +472,7 @@ void RipCD::BuildTrackListTable() { line_edit_track_title_i); } } + +void RipCD::showEvent(QShowEvent *event) { + BuildTrackListTable(); +} diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index e46e1aaa8..976311041 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -38,6 +38,8 @@ class RipCD: public QDialog { ~RipCD(); bool CheckCDIOIsValid(); void BuildTrackListTable(); + protected: + void showEvent(QShowEvent *event); private: static const char* kSettingsGroup; From 9a0b149877c6bad2599b55ebe334da6903b382c5 Mon Sep 17 00:00:00 2001 From: asiviero Date: Wed, 5 Feb 2014 10:25:47 -0200 Subject: [PATCH 4/9] Removed unnecessary clear and switched to clearContents on cdio not available --- src/ui/ripcd.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index e5383c650..bdaa0da54 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -310,7 +310,7 @@ void RipCD::ClickedRipButton() { if(CheckCDIOIsValid()) { BuildTrackListTable(); } else { - ui_->tableWidget->clear(); + ui_->tableWidget->clearContents(); } return; } @@ -452,7 +452,6 @@ void RipCD::RemoveTemporaryDirectory() { } void RipCD::BuildTrackListTable() { - ui_->tableWidget->clear(); checkboxes_.clear(); track_names_.clear(); i_tracks_ = cdio_get_num_tracks(cdio_); From 31400f2740df81dce27eac73bb1fe4b75aee1302 Mon Sep 17 00:00:00 2001 From: Mattias Andersson Date: Sat, 12 Apr 2014 09:20:25 +0200 Subject: [PATCH 5/9] Run 'make format' --- src/ui/mainwindow.cpp | 2 +- src/ui/ripcd.cpp | 24 +++++++++++------------- src/ui/ripcd.h | 3 ++- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 2a0f5b5b6..963e53961 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1857,7 +1857,7 @@ void MainWindow::OpenRipCD() { if (!rip_cd_) { rip_cd_.reset(new RipCD); } - if(rip_cd_->CheckCDIOIsValid()) { + if (rip_cd_->CheckCDIOIsValid()) { rip_cd_->show(); } else { QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index e5705d18e..f33b4d9a1 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -73,7 +73,6 @@ RipCD::RipCD(QWidget* parent) finished_success_(0), finished_failed_(0), ui_(new Ui_RipCD) { - cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); // Init ui_->setupUi(this); @@ -307,10 +306,11 @@ void RipCD::ThreadedTranscoding() { } void RipCD::ClickedRipButton() { - if((cdio_) && cdio_get_media_changed(cdio_)) { - QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Media has changed. Reloading")); + if ((cdio_) && cdio_get_media_changed(cdio_)) { + QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), + tr("Media has changed. Reloading")); cdio_fail.exec(); - if(CheckCDIOIsValid()) { + if (CheckCDIOIsValid()) { BuildTrackListTable(); } else { ui_->tableWidget->clearContents(); @@ -409,7 +409,7 @@ void RipCD::Cancel() { } bool RipCD::CheckCDIOIsValid() { - if((cdio_)) { + if ((cdio_)) { cdio_destroy(cdio_); } cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); @@ -459,21 +459,19 @@ void RipCD::BuildTrackListTable() { i_tracks_ = cdio_get_num_tracks(cdio_); ui_->tableWidget->setRowCount(i_tracks_); for (int i = 1; i <= i_tracks_; i++) { - QCheckBox *checkbox_i = new QCheckBox(ui_->tableWidget); + QCheckBox* checkbox_i = new QCheckBox(ui_->tableWidget); checkbox_i->setCheckState(Qt::Checked); checkboxes_.append(checkbox_i); ui_->tableWidget->setCellWidget(i - 1, kCheckboxColumn, checkbox_i); ui_->tableWidget->setCellWidget(i - 1, kTrackNumberColumn, - new QLabel(QString::number(i))); + new QLabel(QString::number(i))); QString track_title = QString("Track %1").arg(i); - QLineEdit *line_edit_track_title_i = new QLineEdit(track_title, - ui_->tableWidget); + QLineEdit* line_edit_track_title_i = + new QLineEdit(track_title, ui_->tableWidget); track_names_.append(line_edit_track_title_i); ui_->tableWidget->setCellWidget(i - 1, kTrackTitleColumn, - line_edit_track_title_i); + line_edit_track_title_i); } } -void RipCD::showEvent(QShowEvent *event) { - BuildTrackListTable(); -} +void RipCD::showEvent(QShowEvent* event) { BuildTrackListTable(); } diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index 7116b8f47..85818c781 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -38,8 +38,9 @@ class RipCD : public QDialog { ~RipCD(); bool CheckCDIOIsValid(); void BuildTrackListTable(); + protected: - void showEvent(QShowEvent *event); + void showEvent(QShowEvent* event); private: static const char* kSettingsGroup; From 44025dc5884421a2c376135d9217ddfe11f0340d Mon Sep 17 00:00:00 2001 From: Mattias Andersson Date: Sun, 13 Apr 2014 14:41:04 +0200 Subject: [PATCH 6/9] Add a call to cdio_get_media_changed in RipCD::CheckCDIOIsValid This prevents an erroneous message that the media has changed the first time the ripCD dialog is used. --- src/ui/ripcd.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index f33b4d9a1..f29e79061 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -413,6 +413,9 @@ bool RipCD::CheckCDIOIsValid() { cdio_destroy(cdio_); } cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); + // Refresh the status of the cd media. This will prevent unnecessary + // rebuilds of the track list table. + cdio_get_media_changed(cdio_); return (cdio_); } From af34bf606212f06e6201f93f7a45e64657ffcd74 Mon Sep 17 00:00:00 2001 From: Andre Siviero Date: Wed, 16 Apr 2014 11:07:50 -0300 Subject: [PATCH 7/9] Removing extra parenthesis --- src/ui/ripcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index f29e79061..7ecc50289 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -306,7 +306,7 @@ void RipCD::ThreadedTranscoding() { } void RipCD::ClickedRipButton() { - if ((cdio_) && cdio_get_media_changed(cdio_)) { + if (cdio_ && cdio_get_media_changed(cdio_)) { QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Media has changed. Reloading")); cdio_fail.exec(); @@ -409,7 +409,7 @@ void RipCD::Cancel() { } bool RipCD::CheckCDIOIsValid() { - if ((cdio_)) { + if (cdio_) { cdio_destroy(cdio_); } cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); From 4b7c3a2f8c2d1ffb03d9ffb4d1fbe2652a6ab1e7 Mon Sep 17 00:00:00 2001 From: asiviero Date: Tue, 29 Apr 2014 23:12:18 -0300 Subject: [PATCH 8/9] Using scoped ptr to ripcd window, removing extra parenthesis again --- src/ui/ripcd.cpp | 5 ++--- src/ui/ripcd.h | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index 7ecc50289..311807145 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -145,7 +145,6 @@ RipCD::RipCD(QWidget* parent) } RipCD::~RipCD() { - delete ui_; cdio_destroy(cdio_); } @@ -307,7 +306,7 @@ void RipCD::ThreadedTranscoding() { void RipCD::ClickedRipButton() { if (cdio_ && cdio_get_media_changed(cdio_)) { - QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), + QMessageBox cdio_fail(QMessageBox::Critical, tr("Error Ripping CD"), tr("Media has changed. Reloading")); cdio_fail.exec(); if (CheckCDIOIsValid()) { @@ -416,7 +415,7 @@ bool RipCD::CheckCDIOIsValid() { // Refresh the status of the cd media. This will prevent unnecessary // rebuilds of the track list table. cdio_get_media_changed(cdio_); - return (cdio_); + return cdio_; } void RipCD::SetWorking(bool working) { diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index 85818c781..a6c7c9381 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "ui_ripcd.h" @@ -51,7 +52,7 @@ class RipCD : public QDialog { int finished_success_; int finished_failed_; track_t i_tracks_; - Ui_RipCD* ui_; + QScopedPointer ui_; CdIo_t* cdio_; QList checkboxes_; QList generated_files_; From d448ac1179039637d50df02ca59437980c1c5097 Mon Sep 17 00:00:00 2001 From: asiviero Date: Sat, 10 May 2014 00:41:32 -0300 Subject: [PATCH 9/9] Replaced scoped_ptr by unique_ptr --- src/ui/ripcd.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index a6c7c9381..a27252b74 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -22,10 +22,9 @@ #include #include #include -#include #include #include "ui_ripcd.h" - +#include class Ui_RipCD; class Transcoder; @@ -52,7 +51,7 @@ class RipCD : public QDialog { int finished_success_; int finished_failed_; track_t i_tracks_; - QScopedPointer ui_; + std::unique_ptr ui_; CdIo_t* cdio_; QList checkboxes_; QList generated_files_;