Ripper now works with a cdio instance passed into constructor

which comes from a CddaDevice corresponding to the device
This commit is contained in:
Lukas Prediger 2021-05-30 16:46:38 +03:00 committed by John Maguire
parent ae3037984c
commit 3c06b92b24
6 changed files with 11 additions and 30 deletions

View File

@ -57,6 +57,8 @@ void CddaDevice::Refresh() {}
CddaSongLoader* CddaDevice::loader() { return &cdda_song_loader_; }
CdIo_t* CddaDevice::raw_cdio() { return cdio_; }
void CddaDevice::WatchForDiscChanges(bool watch) {
if (watch && !disc_changed_timer_.isActive())
disc_changed_timer_.start(CddaDevice::kDiscChangePollingIntervalMs);

View File

@ -43,6 +43,7 @@ class CddaDevice : public ConnectedDevice {
bool CopyToStorage(const MusicStorage::CopyJob&) { return false; }
bool DeleteFromStorage(const MusicStorage::DeleteJob&) { return false; }
CddaSongLoader* loader();
CdIo_t* raw_cdio(); // TODO: not ideal, but Ripper needs this currently
void WatchForDiscChanges(bool watch);
static const int kDiscChangePollingIntervalMs;

View File

@ -56,10 +56,10 @@ RipCDDialog::RipCDDialog(std::shared_ptr<CddaDevice> cdda_device,
QWidget* parent)
: QDialog(parent),
ui_(new Ui_RipCDDialog),
ripper_(new Ripper(this)),
working_(false),
cdda_device_(std::move(cdda_device)),
loader_(cdda_device_->loader()) {
loader_(cdda_device_->loader()),
ripper_(new Ripper(cdda_device_->raw_cdio(), this)) {
Q_ASSERT(cdda_device_);
// Init
ui_->setupUi(this);

View File

@ -42,7 +42,6 @@ class RipCDDialog : public QDialog {
explicit RipCDDialog(std::shared_ptr<CddaDevice> cdda_device,
QWidget* parent = nullptr);
~RipCDDialog();
bool CheckCDIOIsValid();
protected:
void closeEvent(QCloseEvent* event);
@ -88,9 +87,9 @@ class RipCDDialog : public QDialog {
QPushButton* close_button_;
QPushButton* rip_button_;
std::unique_ptr<Ui_RipCDDialog> ui_;
Ripper* ripper_;
bool working_;
std::shared_ptr<CddaDevice> cdda_device_;
CddaSongLoader* loader_;
Ripper* ripper_;
};
#endif // SRC_RIPPER_RIPCDDIALOG_H_

View File

@ -38,15 +38,15 @@ const char kWavFileTypeFormatChunk[] = "WAVEfmt ";
const char kWavDataString[] = "data";
} // namespace
Ripper::Ripper(QObject* parent)
Ripper::Ripper(CdIo_t* cdio, QObject* parent)
: QObject(parent),
cdio_(cdio),
transcoder_(new Transcoder(this)),
cancel_requested_(false),
finished_success_(0),
finished_failed_(0),
files_tagged_(0) {
cdio_ = cdio_open(NULL, DRIVER_UNKNOWN);
Q_ASSERT(cdio_); // TODO: error handling
connect(transcoder_, SIGNAL(JobComplete(QString, QString, bool)),
SLOT(TranscodingJobComplete(QString, QString, bool)));
connect(transcoder_, SIGNAL(AllJobsComplete()),
@ -54,7 +54,7 @@ Ripper::Ripper(QObject* parent)
connect(transcoder_, SIGNAL(LogLine(QString)), SLOT(LogLine(QString)));
}
Ripper::~Ripper() { cdio_destroy(cdio_); }
Ripper::~Ripper() {}
void Ripper::AddTrack(int track_number, const QString& title,
const QString& transcoded_filename,
@ -89,23 +89,6 @@ int Ripper::AddedTracks() const { return tracks_.length(); }
void Ripper::ClearTracks() { tracks_.clear(); }
bool Ripper::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.
if (cdio_) {
cdio_get_media_changed(cdio_);
}
return cdio_;
}
bool Ripper::MediaChanged() const {
return cdio_ && cdio_get_media_changed(cdio_);
}
void Ripper::Start() {
{
QMutexLocker l(&mutex_);

View File

@ -40,7 +40,7 @@ class Ripper : public QObject {
Q_OBJECT
public:
explicit Ripper(QObject* parent = nullptr);
explicit Ripper(CdIo_t* cdio, QObject* parent = nullptr);
~Ripper();
// Adds a track to the rip list if the track number corresponds to a
@ -60,10 +60,6 @@ class Ripper : public QObject {
int AddedTracks() const;
// Clears the rip list.
void ClearTracks();
// Returns true if a cd device was successfully opened.
bool CheckCDIOIsValid();
// Returns true if the cd media has changed.
bool MediaChanged() const;
signals:
void Finished();