Merge pull request #4171 from asiviero/master
Addressing #4165 and #4166
This commit is contained in:
commit
5fe468456a
|
@ -1857,7 +1857,7 @@ void MainWindow::OpenRipCD() {
|
||||||
if (!rip_cd_) {
|
if (!rip_cd_) {
|
||||||
rip_cd_.reset(new RipCD);
|
rip_cd_.reset(new RipCD);
|
||||||
}
|
}
|
||||||
if (rip_cd_->CDIOIsValid()) {
|
if (rip_cd_->CheckCDIOIsValid()) {
|
||||||
rip_cd_->show();
|
rip_cd_->show();
|
||||||
} else {
|
} else {
|
||||||
QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"),
|
QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"),
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QtConcurrentRun>
|
#include <QtConcurrentRun>
|
||||||
#include <cdio/cdio.h>
|
#include <cdio/cdio.h>
|
||||||
|
@ -72,7 +73,7 @@ RipCD::RipCD(QWidget* parent)
|
||||||
finished_success_(0),
|
finished_success_(0),
|
||||||
finished_failed_(0),
|
finished_failed_(0),
|
||||||
ui_(new Ui_RipCD) {
|
ui_(new Ui_RipCD) {
|
||||||
|
cdio_ = cdio_open(NULL, DRIVER_UNKNOWN);
|
||||||
// Init
|
// Init
|
||||||
ui_->setupUi(this);
|
ui_->setupUi(this);
|
||||||
|
|
||||||
|
@ -116,28 +117,6 @@ RipCD::RipCD(QWidget* parent)
|
||||||
setWindowTitle(tr("Rip CD"));
|
setWindowTitle(tr("Rip CD"));
|
||||||
AddDestinationDirectory(QDir::homePath());
|
AddDestinationDirectory(QDir::homePath());
|
||||||
|
|
||||||
cdio_ = cdio_open(nullptr, 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
|
// Get presets
|
||||||
QList<TranscoderPreset> presets = Transcoder::GetAllPresets();
|
QList<TranscoderPreset> presets = Transcoder::GetAllPresets();
|
||||||
qSort(presets.begin(), presets.end(), ComparePresetsByName);
|
qSort(presets.begin(), presets.end(), ComparePresetsByName);
|
||||||
|
@ -165,7 +144,9 @@ RipCD::RipCD(QWidget* parent)
|
||||||
ui_->progress_bar->setMaximum(100);
|
ui_->progress_bar->setMaximum(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
RipCD::~RipCD() { delete ui_; }
|
RipCD::~RipCD() {
|
||||||
|
cdio_destroy(cdio_);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WAV Header documentation
|
* WAV Header documentation
|
||||||
|
@ -225,22 +206,19 @@ int RipCD::NumTracksToRip() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipCD::ThreadClickedRipButton() {
|
void RipCD::ThreadClickedRipButton() {
|
||||||
|
|
||||||
temporary_directory_ = Utilities::MakeTempDir() + "/";
|
temporary_directory_ = Utilities::MakeTempDir() + "/";
|
||||||
|
|
||||||
finished_success_ = 0;
|
finished_success_ = 0;
|
||||||
finished_failed_ = 0;
|
finished_failed_ = 0;
|
||||||
ui_->progress_bar->setMaximum(NumTracksToRip() * 2 * 100);
|
ui_->progress_bar->setMaximum(NumTracksToRip() * 2 * 100);
|
||||||
|
|
||||||
// Set up progress bar
|
// Set up progress bar
|
||||||
emit(SignalUpdateProgress());
|
emit(SignalUpdateProgress());
|
||||||
|
tracks_to_rip_.clear();
|
||||||
for (int i = 1; i <= i_tracks_; i++) {
|
for (int i = 1; i <= i_tracks_; i++) {
|
||||||
if (!checkboxes_.value(i - 1)->isChecked()) {
|
if (!checkboxes_.value(i - 1)->isChecked()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tracks_to_rip_.append(i);
|
tracks_to_rip_.append(i);
|
||||||
|
|
||||||
QString filename = temporary_directory_ +
|
QString filename = temporary_directory_ +
|
||||||
ParseFileFormatString(ui_->format_filename->text(), i) +
|
ParseFileFormatString(ui_->format_filename->text(), i) +
|
||||||
".wav";
|
".wav";
|
||||||
|
@ -327,6 +305,17 @@ void RipCD::ThreadedTranscoding() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipCD::ClickedRipButton() {
|
void RipCD::ClickedRipButton() {
|
||||||
|
if (cdio_ && cdio_get_media_changed(cdio_)) {
|
||||||
|
QMessageBox cdio_fail(QMessageBox::Critical, tr("Error Ripping CD"),
|
||||||
|
tr("Media has changed. Reloading"));
|
||||||
|
cdio_fail.exec();
|
||||||
|
if (CheckCDIOIsValid()) {
|
||||||
|
BuildTrackListTable();
|
||||||
|
} else {
|
||||||
|
ui_->tableWidget->clearContents();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
SetWorking(true);
|
SetWorking(true);
|
||||||
QtConcurrent::run(this, &RipCD::ThreadClickedRipButton);
|
QtConcurrent::run(this, &RipCD::ThreadClickedRipButton);
|
||||||
}
|
}
|
||||||
|
@ -412,12 +401,22 @@ void RipCD::AddDestinationDirectory(QString dir) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipCD::Cancel() {
|
void RipCD::Cancel() {
|
||||||
|
ui_->progress_bar->setValue(0);
|
||||||
transcoder_->Cancel();
|
transcoder_->Cancel();
|
||||||
RemoveTemporaryDirectory();
|
RemoveTemporaryDirectory();
|
||||||
SetWorking(false);
|
SetWorking(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RipCD::CDIOIsValid() const { return (cdio_); }
|
bool RipCD::CheckCDIOIsValid() {
|
||||||
|
if (cdio_) {
|
||||||
|
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_;
|
||||||
|
}
|
||||||
|
|
||||||
void RipCD::SetWorking(bool working) {
|
void RipCD::SetWorking(bool working) {
|
||||||
rip_button_->setVisible(!working);
|
rip_button_->setVisible(!working);
|
||||||
|
@ -455,3 +454,26 @@ void RipCD::RemoveTemporaryDirectory() {
|
||||||
Utilities::RemoveRecursive(temporary_directory_);
|
Utilities::RemoveRecursive(temporary_directory_);
|
||||||
temporary_directory_.clear();
|
temporary_directory_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RipCD::BuildTrackListTable() {
|
||||||
|
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++) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RipCD::showEvent(QShowEvent* event) { BuildTrackListTable(); }
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <cdio/cdio.h>
|
#include <cdio/cdio.h>
|
||||||
#include "ui_ripcd.h"
|
#include "ui_ripcd.h"
|
||||||
|
#include <memory>
|
||||||
class Ui_RipCD;
|
class Ui_RipCD;
|
||||||
class Transcoder;
|
class Transcoder;
|
||||||
|
|
||||||
|
@ -36,7 +36,11 @@ class RipCD : public QDialog {
|
||||||
public:
|
public:
|
||||||
explicit RipCD(QWidget* parent = nullptr);
|
explicit RipCD(QWidget* parent = nullptr);
|
||||||
~RipCD();
|
~RipCD();
|
||||||
bool CDIOIsValid() const;
|
bool CheckCDIOIsValid();
|
||||||
|
void BuildTrackListTable();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void showEvent(QShowEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const char* kSettingsGroup;
|
static const char* kSettingsGroup;
|
||||||
|
@ -47,7 +51,7 @@ class RipCD : public QDialog {
|
||||||
int finished_success_;
|
int finished_success_;
|
||||||
int finished_failed_;
|
int finished_failed_;
|
||||||
track_t i_tracks_;
|
track_t i_tracks_;
|
||||||
Ui_RipCD* ui_;
|
std::unique_ptr<Ui_RipCD> ui_;
|
||||||
CdIo_t* cdio_;
|
CdIo_t* cdio_;
|
||||||
QList<QCheckBox*> checkboxes_;
|
QList<QCheckBox*> checkboxes_;
|
||||||
QList<QString> generated_files_;
|
QList<QString> generated_files_;
|
||||||
|
|
Loading…
Reference in New Issue