Merge pull request #4340 from paperbagcorner/ripcd-cancel

Fix the cancel functionality in the CD ripper
This commit is contained in:
John Maguire 2014-05-12 17:53:48 +02:00
commit 30581703d4
2 changed files with 22 additions and 4 deletions

View File

@ -31,6 +31,7 @@
#include <QFrame>
#include <QLineEdit>
#include <QMessageBox>
#include <QMutexLocker>
#include <QtDebug>
#include <QtConcurrentRun>
#include <cdio/cdio.h>
@ -72,7 +73,8 @@ RipCD::RipCD(QWidget* parent)
queued_(0),
finished_success_(0),
finished_failed_(0),
ui_(new Ui_RipCD) {
ui_(new Ui_RipCD),
cancel_requested_(false) {
cdio_ = cdio_open(NULL, DRIVER_UNKNOWN);
// Init
ui_->setupUi(this);
@ -144,9 +146,7 @@ RipCD::RipCD(QWidget* parent)
ui_->progress_bar->setMaximum(100);
}
RipCD::~RipCD() {
cdio_destroy(cdio_);
}
RipCD::~RipCD() { cdio_destroy(cdio_); }
/*
* WAV Header documentation
@ -232,6 +232,13 @@ void RipCD::ThreadClickedRipButton() {
QByteArray buffered_input_bytes(CDIO_CD_FRAMESIZE_RAW, '\0');
for (lsn_t i_cursor = i_first_lsn; i_cursor <= i_last_lsn; i_cursor++) {
{
QMutexLocker l(&mutex_);
if (cancel_requested_) {
qLog(Debug) << "CD ripping canceled.";
return;
}
}
if (cdio_read_audio_sector(cdio_, buffered_input_bytes.data(),
i_cursor) == DRIVER_OP_SUCCESS) {
destination_file->write(buffered_input_bytes.data(),
@ -317,6 +324,10 @@ void RipCD::ClickedRipButton() {
return;
}
SetWorking(true);
{
QMutexLocker l(&mutex_);
cancel_requested_ = false;
}
QtConcurrent::run(this, &RipCD::ThreadClickedRipButton);
}
@ -401,6 +412,10 @@ void RipCD::AddDestinationDirectory(QString dir) {
}
void RipCD::Cancel() {
{
QMutexLocker l(&mutex_);
cancel_requested_ = true;
}
ui_->progress_bar->setValue(0);
transcoder_->Cancel();
RemoveTemporaryDirectory();

View File

@ -22,6 +22,7 @@
#include <QCheckBox>
#include <QThread>
#include <QFile>
#include <QMutex>
#include <cdio/cdio.h>
#include "ui_ripcd.h"
#include <memory>
@ -62,6 +63,8 @@ class RipCD : public QDialog {
QPushButton* close_button_;
QPushButton* rip_button_;
QString temporary_directory_;
bool cancel_requested_;
QMutex mutex_;
void WriteWAVHeader(QFile* stream, int32_t i_bytecount);
int NumTracksToRip();