[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [audex/0.8] /: Replaced KKompactDisc by Solid.
From: Marco Nelles <marco () maniatek ! de>
Date: 2015-01-31 18:53:08
Message-ID: E1YHdAK-0007th-Mz () scm ! kde ! org
[Download RAW message or body]
Git commit 4652d93847c4ea998908cd3c208aee041287078c by Marco Nelles.
Committed on 31/01/2015 at 18:52.
Pushed by marcon into branch '0.8'.
Replaced KKompactDisc by Solid.
M +1 -0 CMakeLists.txt
M +1 -1 core/audex.cpp
M +25 -74 mainwindow.cpp
M +2 -4 mainwindow.h
M +104 -222 models/cddamodel.cpp
M +19 -65 models/cddamodel.h
M +3 -6 utils/cddaextractthread.cpp
M +1 -1 utils/cddaextractthread.h
A +152 -0 utils/cddasolid.cpp [License: GPL (v3+)]
A +85 -0 utils/cddasolid.h [License: GPL (v3+)]
M +5 -5 widgets/cddaheaderwidget.cpp
M +0 -11 widgets/devicewidget.cpp
M +3 -15 widgets/devicewidgetUI.ui
http://commits.kde.org/audex/4652d93847c4ea998908cd3c208aee041287078c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c33c8ff..81155d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,6 +48,7 @@ set(audex_SRCS
utils/playlist.cpp
utils/wavefilewriter.cpp
utils/cddaparanoia.cpp
+ utils/cddasolid.cpp
utils/encoderwrapper.cpp
utils/cddaextractthread.cpp
utils/upload.cpp
diff --git a/core/audex.cpp b/core/audex.cpp
index c3ada9c..f27bdd5 100644
--- a/core/audex.cpp
+++ b/core/audex.cpp
@@ -41,7 +41,7 @@ Audex::Audex(QWidget* parent, ProfileModel *profile_model, \
CDDAModel *cdda_model return;
}
- cdda_extract_thread = new CDDAExtractThread(this, cdda_model->device());
+ cdda_extract_thread = new CDDAExtractThread(this, cdda_model->paranoia());
if (!cdda_extract_thread) {
kDebug() << "PANIC ERROR. Could not load object CDDAExtractThread. Low mem?";
return;
diff --git a/mainwindow.cpp b/mainwindow.cpp
index e042531..88ecfe8 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -39,7 +39,7 @@ MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent) {
if ((dev_index >= 0) && (dev_index < deviceUrls.count())) {
device_path = KCompactDisc::cdromDeviceUrl(deviceUrls[dev_index]).path();
}
- cdda_model = new CDDAModel(this, device_path);
+ cdda_model = new CDDAModel(this);
if (!cdda_model) {
kDebug() << "Unable to create CDDAModel object. Low mem?";
ErrorDialog::show(this, i18n("Unable to create CDDAModel object."), \
i18n("Internal error. Check your hardware. If all okay please make bug report.")); @@ \
-50,10 +50,9 @@ MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent) { \
return; }
- connect(cdda_model, SIGNAL(driveStatusChanged(const CDDAModel::DriveStatus)), \
this, SLOT(drive_status_changed(const CDDAModel::DriveStatus)));
- connect(cdda_model, SIGNAL(discStatusChanged(const CDDAModel::DiscStatus)), this, \
SLOT(disc_status_changed(const CDDAModel::DiscStatus)));
- connect(cdda_model, SIGNAL(discChanged(const CDDAModel::DiscType)), this, \
SLOT(disc_changed(const CDDAModel::DiscType)));
- connect(cdda_model, SIGNAL(discInfoChanged(const CDDAModel::DiscInfo)), this, \
SLOT(disc_info_changed(const CDDAModel::DiscInfo))); + connect(cdda_model, \
SIGNAL(audioDiscDetected()), this, SLOT(new_audio_disc_detected())); + \
connect(cdda_model, SIGNAL(audioDiscRemoved()), this, SLOT(audio_disc_removed())); +
connect(cdda_model, SIGNAL(cddbLookupStarted()), this, SLOT(cddb_lookup_start()));
connect(cdda_model, SIGNAL(cddbLookupDone(const bool)), this, \
SLOT(cddb_lookup_done(const bool))); connect(cdda_model, SIGNAL(cddbDataModified()), \
this, SLOT(enable_submit())); @@ -113,13 +112,13 @@ void MainWindow::cddb_submit() {
void MainWindow::rip() {
- if (cdda_model->discInfo() == CDDAModel::DiscNoInfo) {
+ if (cdda_model->empty()) {
if (KMessageBox::warningYesNo(this, i18n("No disc information set. Do you really \
want to continue?"),
- i18n("Disc information not found"),
- KStandardGuiItem::yes(),
- KStandardGuiItem::no(),
- "no_disc_info_warn")== KMessageBox::No) return;
+ i18n("Disc information not found"),
+ KStandardGuiItem::yes(),
+ KStandardGuiItem::no(),
+ "no_disc_info_warn")== KMessageBox::No) return;
}
@@ -185,67 +184,27 @@ void MainWindow::configure() {
}
-void MainWindow::drive_status_changed(const CDDAModel::DriveStatus status) {
- switch (status) {
- case CDDAModel::DriveNoStatus :
- status_label->setText(i18n("No status information available"));
- enable_layout(FALSE);
- break;
- case CDDAModel::DriveEmpty :
- status_label->setText(i18n("No disc in drive"));
- enable_layout(TRUE);
- break;
- case CDDAModel::DriveReady :
- status_label->setText(i18n("Audio disc in drive"));
- enable_layout(TRUE);
- resizeColumns();
- if (Preferences::cddbLookupAuto()) {
- kDebug() << "Performing CDDB auto lookup";
- QTimer::singleShot(0, this, SLOT(cddb_lookup()));
- }
- break;
- case CDDAModel::DriveOpen :
- status_label->setText(i18n("Drive tray open"));
- enable_layout(FALSE);
- break;
- case CDDAModel::DriveNotReady :
- status_label->setText(i18n("Drive not ready"));
- enable_layout(FALSE);
- break;
- case CDDAModel::DriveError :
- status_label->setText(i18n("Drive error"));
- enable_layout(FALSE);
- break;
- default :
- break;
- }
-}
+void MainWindow::new_audio_disc_detected() {
-void MainWindow::disc_status_changed(const CDDAModel::DiscStatus status) {
- Q_UNUSED(status);
-}
+ status_label->setText(i18n("Audio disc detected"));
+ enable_layout(TRUE);
+ resizeColumns();
+ if (Preferences::cddbLookupAuto()) {
+ kDebug() << "Performing CDDB auto lookup";
+ QTimer::singleShot(0, this, SLOT(cddb_lookup()));
+ }
-void MainWindow::disc_changed(const CDDAModel::DiscType type) {
- Q_UNUSED(type);
update_layout();
+
}
-void MainWindow::disc_info_changed(const CDDAModel::DiscInfo info) {
- Q_UNUSED(info);
- switch (info) {
- case CDDAModel::DiscNoInfo :
- break;
- case CDDAModel::DiscManualInfo :
- break;
- case CDDAModel::DiscCDTEXTInfo :
- case CDDAModel::DiscCDDBInfo :
- case CDDAModel::DiscPhononMetadataInfo :
- if (Preferences::coverLookupAuto()) cdda_header_widget->googleAuto();
- break;
- default :
- break;
- }
+void MainWindow::audio_disc_removed() {
+
+ status_label->setText(i18n("No audio disc detected"));
+ enable_layout(FALSE);
+
update_layout();
+
}
void MainWindow::cddb_lookup_start() {
@@ -261,6 +220,7 @@ void MainWindow::cddb_lookup_done(const bool successful) {
status_label->setText(status_label_prev);
update_layout();
disable_submit();
+ if (Preferences::coverLookupAuto()) cdda_header_widget->googleAuto();
}
void MainWindow::update_layout() {
@@ -310,15 +270,6 @@ void MainWindow::disable_submit() {
void MainWindow::configuration_updated(const QString& dialog_name) {
Q_UNUSED(dialog_name);
Preferences::self()->writeConfig();
- QStringList deviceUrls = KCompactDisc::cdromDeviceNames();
- int dev_index = Preferences::cdDevice().toInt();
- QString device_path;
- if ((dev_index >= 0) && (dev_index < deviceUrls.count())) {
- device_path = KCompactDisc::cdromDeviceUrl(deviceUrls[dev_index]).path();
- }
- if (device_path != cdda_model->device()) {
- cdda_model->setDevice(device_path);
- }
}
void MainWindow::current_profile_updated_from_ui(int row) {
diff --git a/mainwindow.h b/mainwindow.h
index 833d10f..bb7fa98 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -83,10 +83,8 @@ private Q_SLOTS:
void rip();
void configure();
- void drive_status_changed(const CDDAModel::DriveStatus status);
- void disc_status_changed(const CDDAModel::DiscStatus status);
- void disc_changed(const CDDAModel::DiscType type);
- void disc_info_changed(const CDDAModel::DiscInfo info);
+ void new_audio_disc_detected();
+ void audio_disc_removed();
void cddb_lookup_start();
void cddb_lookup_done(const bool successful);
diff --git a/models/cddamodel.cpp b/models/cddamodel.cpp
index 35d9275..f9f0d7a 100644
--- a/models/cddamodel.cpp
+++ b/models/cddamodel.cpp
@@ -18,21 +18,20 @@
#include "cddamodel.h"
-CDDAModel::CDDAModel(QObject *parent, const QString& device) : \
QAbstractTableModel(parent) { +CDDAModel::CDDAModel(QObject *parent) : \
QAbstractTableModel(parent) {
- cddb_transaction_pending = FALSE;
+ pn = 0;
+ _device.clear();
+ _udi.clear();
- compact_disc = new KCompactDisc();
- if (!compact_disc) {
- kDebug() << "Unable to create KCompactDisc object. Low mem?";
- error = Error(i18n("Unable to create KCompactDisc object."), i18n("This is an \
internal error. Check your hardware. If all okay please make bug report."), \
Error::ERROR, this); + solid = new CDDASolid(this);
+ if (!solid) {
+ kDebug() << "Unable to create solid object. low mem?";
+ error = Error(i18n("Unable to create Solid object."), i18n("This is an internal \
error. Check your hardware. If all okay please make bug report."), Error::ERROR, \
this); return;
}
-
- setDevice(device);
- connect(compact_disc, SIGNAL(discChanged(unsigned int)), this, \
SLOT(slot_disc_changed(unsigned int)));
- connect(compact_disc, SIGNAL(discInformation(KCompactDisc::DiscInfo)), this, \
SLOT(slot_disc_information(KCompactDisc::DiscInfo)));
- connect(compact_disc, SIGNAL(discStatusChanged(KCompactDisc::DiscStatus)), this, \
SLOT(slot_disc_status_changed(KCompactDisc::DiscStatus))); + connect(solid, \
SIGNAL(audioDiscDetected(const QString&)), this, SLOT(new_audio_disc_available(const \
QString&))); + connect(solid, SIGNAL(audioDiscRemoved(const QString&)), this, \
SLOT(audio_disc_removed(const QString&)));
cddb = new KCDDB::Client();
if (!cddb) {
@@ -42,15 +41,15 @@ CDDAModel::CDDAModel(QObject *parent, const QString& device) : \
QAbstractTableMod }
connect(cddb, SIGNAL(finished(KCDDB::Result)), this, \
SLOT(lookup_cddb_done(KCDDB::Result)));
+ cddb_transaction_pending = FALSE;
+
_cover = new CachedImage();
cd_info.clear();
modified = FALSE;
+ _empty = TRUE;
- drive_status = DriveNoStatus;
- disc_status = DiscNoStatus;
- disc_type = DiscNoType;
- disc_info = DiscNoInfo;
+ QTimer::singleShot(2000, solid, SLOT(scanBus()));
}
@@ -58,17 +57,15 @@ CDDAModel::~CDDAModel() {
delete _cover;
delete cddb;
- delete compact_disc;
+ delete solid;
-}
+ if (pn) delete pn;
-void CDDAModel::setDevice(const QString& device) {
- this->_device = device;
- if (!device.isEmpty()) compact_disc->setDevice(device, 50, FALSE);
}
int CDDAModel::rowCount(const QModelIndex &parent) const {
- return parent.isValid()?0:compact_disc->tracks();
+ if (!pn) return 0;
+ return parent.isValid()?0:pn->numOfTracks();
}
int CDDAModel::columnCount(const QModelIndex &parent) const {
@@ -78,7 +75,7 @@ int CDDAModel::columnCount(const QModelIndex &parent) const {
QVariant CDDAModel::data(const QModelIndex &index, int role) const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) {
+ if (!pn) {
return QVariant();
}
@@ -126,17 +123,13 @@ QVariant CDDAModel::data(const QModelIndex &index, int role) \
const { case CDDA_MODEL_COLUMN_ARTIST_INDEX :
if (isAudioTrack(index.row()+1)) {
QString a = \
cd_info.track(index.row()).get(KCDDB::Artist).toString();
- if (a.isEmpty()) return compact_disc->trackArtist(index.row()+1);
return a;
}
break;
case CDDA_MODEL_COLUMN_TITLE_INDEX :
if (isAudioTrack(index.row()+1)) {
QString t = \
cd_info.track(index.row()).get(KCDDB::Title).toString();
- if (t.isEmpty()) {
- if (disc_info == DiscNoInfo) return i18n("Track %1", index.row()+1);
- return compact_disc->trackTitle(index.row()+1);
- }
+ if (t.isEmpty()) return i18n("Track %1", index.row()+1);
return t;
}
break;
@@ -151,7 +144,7 @@ QVariant CDDAModel::data(const QModelIndex &index, int role) \
const {
bool CDDAModel::setData(const QModelIndex &index, const QVariant &value, int role) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) {
+ if (!pn) {
return FALSE;
}
@@ -234,48 +227,38 @@ Qt::ItemFlags CDDAModel::flags(const QModelIndex &index) const \
{ }
void CDDAModel::setArtist(const QString& a) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (a != cd_info.get(KCDDB::Artist).toString()) {
- if (a.isEmpty()) {
- cd_info.set(KCDDB::Artist, compact_disc->discArtist());
- } else {
- cd_info.set(KCDDB::Artist, a);
- }
+ cd_info.set(KCDDB::Artist, a);
modify();
reset();
}
}
const QString CDDAModel::artist() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QString();
+ if (!pn) return QString();
QString a = cd_info.get(KCDDB::Artist).toString();
- if (a.isEmpty()) return compact_disc->discArtist();
return a;
}
void CDDAModel::setTitle(const QString& t) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (t != cd_info.get(KCDDB::Title).toString()) {
- if (t.isEmpty()) {
- cd_info.set(KCDDB::Title, compact_disc->discTitle());
- } else {
- cd_info.set(KCDDB::Title, t);
- }
+ cd_info.set(KCDDB::Title, t);
modify();
reset();
}
}
const QString CDDAModel::title() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QString();
+ if (!pn) return QString();
QString t = cd_info.get(KCDDB::Title).toString();
- if (t.isEmpty()) return compact_disc->discTitle();
return t;
}
void CDDAModel::setCategory(const QString& c) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
QStringList validCategories;
validCategories << "blues" << "classical" << "country"
@@ -292,12 +275,12 @@ void CDDAModel::setCategory(const QString& c) {
}
const QString CDDAModel::category() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QString();
+ if (!pn) return QString();
return cd_info.get(KCDDB::Category).toString();
}
void CDDAModel::setGenre(const QString& g) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (g != cd_info.get(KCDDB::Genre).toString()) {
cd_info.set(KCDDB::Genre, g);
modify();
@@ -306,12 +289,12 @@ void CDDAModel::setGenre(const QString& g) {
}
const QString CDDAModel::genre() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QString();
+ if (!pn) return QString();
return cd_info.get(KCDDB::Genre).toString();
}
void CDDAModel::setYear(const QString& year) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (year != cd_info.get(KCDDB::Year).toString()) {
cd_info.set(KCDDB::Year, year);
modify();
@@ -320,12 +303,12 @@ void CDDAModel::setYear(const QString& year) {
}
const QString CDDAModel::year() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QString();
+ if (!pn) return QString();
return cd_info.get(KCDDB::Year).toString();
}
void CDDAModel::setExtendedData(const QStringList& e) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (e != cd_info.get(KCDDB::Comment).toStringList()) {
cd_info.set(KCDDB::Comment, e);
modify();
@@ -334,12 +317,12 @@ void CDDAModel::setExtendedData(const QStringList& e) {
}
const QStringList CDDAModel::extendedData() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QStringList();
+ if (!pn) return QStringList();
return cd_info.get(KCDDB::Comment).toStringList();
}
void CDDAModel::setCDNum(const int n) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (n != cd_info.get("DNO").toInt()) {
cd_info.set("DNO", n);
modify();
@@ -348,13 +331,13 @@ void CDDAModel::setCDNum(const int n) {
}
int CDDAModel::cdNum() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return -1;
+ if (!pn) return -1;
if (!isMultiCD()) return 0;
return cd_info.get("DNO").toInt();
}
void CDDAModel::setTrackOffset(const int n) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (n != cd_info.get("DTRACKOFFSET").toInt()) {
cd_info.set("DTRACKOFFSET", n);
modify();
@@ -363,13 +346,14 @@ void CDDAModel::setTrackOffset(const int n) {
}
int CDDAModel::trackOffset() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return 1;
+ if (!pn) return -1;
return cd_info.get("DTRACKOFFSET").toInt();
}
int CDDAModel::guessMultiCD(QString& newTitle) const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return -1;
+ if (!pn) return -1;
+
QString t = cd_info.get(KCDDB::Title).toString();
QRegExp rx1("[\\(|\\[]* *([c|C][d|D]|[d|D][i|I][s|S][k|c|K|C]) *[0-9]* *[\\)|\\]]* \
*$"); int i = rx1.indexIn(t);
@@ -391,7 +375,7 @@ int CDDAModel::guessMultiCD(QString& newTitle) const {
}
void CDDAModel::setMultiCD(const bool multi) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (multi != cd_info.get("DMULTICD").toBool()) {
cd_info.set("DMULTICD", multi);
modify();
@@ -400,12 +384,12 @@ void CDDAModel::setMultiCD(const bool multi) {
}
bool CDDAModel::isMultiCD() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return FALSE;
+ if (!pn) return FALSE;
return cd_info.get("DMULTICD").toBool();
}
void CDDAModel::setCustomData(const QString& type, const QVariant& data) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (data != cd_info.get(type)) {
cd_info.set(type, data);
modify();
@@ -414,12 +398,12 @@ void CDDAModel::setCustomData(const QString& type, const \
QVariant& data) { }
const QVariant CDDAModel::customData(const QString& type) const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QVariant();
+ if (!pn) return QVariant();
return cd_info.get(type);
}
void CDDAModel::setCustomDataPerTrack(const int n, const QString& type, const \
QVariant& data) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (data != cd_info.track(n).get(type)) {
cd_info.track(n).set(type, data);
modify();
@@ -428,7 +412,7 @@ void CDDAModel::setCustomDataPerTrack(const int n, const QString& \
type, const QV }
const QVariant CDDAModel::getCustomDataPerTrack(const int n, const QString& type) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return QVariant();
+ if (!pn) return QVariant();
return cd_info.track(n).get(type);
}
@@ -488,7 +472,7 @@ const QString CDDAModel::coverSupportedMimeTypeList() const {
}
bool CDDAModel::guessVarious() const {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return FALSE;
+ if (!pn) return FALSE;
QString a;
for (int i = 0; i < cd_info.numberOfTracks(); ++i) {
if ((i > 0) && (cd_info.track(i).get(KCDDB::Artist).toString().toLower() != \
a.toLower())) return TRUE; @@ -498,7 +482,7 @@ bool CDDAModel::guessVarious() const {
}
void CDDAModel::setVarious(bool various) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
if (various != cd_info.get("DVARIOUS").toBool()) {
cd_info.set("DVARIOUS", various);
modify();
@@ -506,12 +490,12 @@ void CDDAModel::setVarious(bool various) {
}
bool CDDAModel::isVarious() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return FALSE;
+ if (!pn) return FALSE;
return cd_info.get("DVARIOUS").toBool();
}
void CDDAModel::swapArtistAndTitleOfTracks() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
for (int i = 0; i < cd_info.numberOfTracks(); ++i) {
QVariant tmp = cd_info.track(i).get(KCDDB::Artist);
cd_info.track(i).set(KCDDB::Artist, cd_info.track(i).get(KCDDB::Title));
@@ -522,7 +506,7 @@ void CDDAModel::swapArtistAndTitleOfTracks() {
}
void CDDAModel::swapArtistAndTitle() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
QVariant tmp = cd_info.get(KCDDB::Title);
cd_info.set(KCDDB::Title, cd_info.get(KCDDB::Artist));
cd_info.set(KCDDB::Artist, tmp);
@@ -531,7 +515,7 @@ void CDDAModel::swapArtistAndTitle() {
}
void CDDAModel::splitTitleOfTracks(const QString& divider) {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
for (int i = 0; i < cd_info.numberOfTracks(); ++i) {
int splitPos = cd_info.track(i).get(KCDDB::Title).toString().indexOf(divider);
if (splitPos >= 0) {
@@ -547,7 +531,7 @@ void CDDAModel::splitTitleOfTracks(const QString& divider) {
}
void CDDAModel::capitalizeTracks() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
for (int i = 0; i < cd_info.numberOfTracks(); ++i) {
cd_info.track(i).set(KCDDB::Artist, \
capitalize(cd_info.track(i).get(KCDDB::Artist).toString()));
cd_info.track(i).set(KCDDB::Title, \
capitalize(cd_info.track(i).get(KCDDB::Title).toString())); @@ -557,7 +541,7 @@ void \
CDDAModel::capitalizeTracks() { }
void CDDAModel::capitalizeHeader() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
cd_info.set(KCDDB::Artist, capitalize(cd_info.get(KCDDB::Artist).toString()));
cd_info.set(KCDDB::Title, capitalize(cd_info.get(KCDDB::Title).toString()));
modified = TRUE; emit cddbDataModified();
@@ -565,7 +549,7 @@ void CDDAModel::capitalizeHeader() {
}
void CDDAModel::setTitleArtistsFromHeader() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
for (int i = 0; i < cd_info.numberOfTracks(); ++i) {
cd_info.track(i).set(KCDDB::Artist, cd_info.get(KCDDB::Artist));
}
@@ -574,7 +558,8 @@ void CDDAModel::setTitleArtistsFromHeader() {
}
int CDDAModel::numOfTracks() const {
- return compact_disc->tracks();
+ if (!pn) return 0;
+ return pn->numOfTracks();
}
int CDDAModel::numOfAudioTracks() const {
@@ -590,7 +575,8 @@ int CDDAModel::numOfAudioTracksInSelection() const {
}
int CDDAModel::length() const {
- return compact_disc->discLength();
+ if (!pn) return 0;
+ return pn->length();
}
int CDDAModel::lengthOfAudioTracks() const {
@@ -611,15 +597,18 @@ int CDDAModel::lengthOfAudioTracksInSelection() const {
}
int CDDAModel::lengthOfTrack(int n) const {
- return compact_disc->trackLength(n);
+ if (!pn) return 0;
+ return pn->lengthOfTrack(n);
}
const QList<quint32> CDDAModel::discSignature() const {
- return compact_disc->discSignature();
+ if (!pn) return QList<quint32>();
+ return pn->discSignature();
}
bool CDDAModel::isAudioTrack(int n) const {
- return compact_disc->isAudio(n);
+ if (!pn) return FALSE;
+ return pn->isAudioTrack(n);
}
void CDDAModel::clear() {
@@ -672,66 +661,9 @@ Error CDDAModel::lastError() const {
return error;
}
-CDDAModel::DriveStatus CDDAModel::driveStatus() const {
- return drive_status;
-}
-
-const QString CDDAModel::driveStatusString() const {
- switch (drive_status) {
- case DriveEmpty : return i18n("No disc in drive");
- case DriveReady : return i18n("Disc in drive");
- case DriveOpen : return i18n("Drive tray open");
- case DriveNotReady : return i18n("Drive not ready");
- case DriveError : return i18n("Drive error");
- default : ;
- }
- return i18n("No drive status available");
-}
-
-CDDAModel::DiscStatus CDDAModel::discStatus() const {
- return disc_status;
-}
-
-const QString CDDAModel::discStatusString() const {
- switch (disc_status) {
- case DiscPlaying : return i18n("Disc playing");
- case DiscPaused : return i18n("Disc paused");
- case DiscStopped : return i18n("Disc stopped");
- default : ;
- }
- return i18n("No disc status available");
-}
-
-CDDAModel::DiscType CDDAModel::discType() const {
- return disc_type;
-}
-
-const QString CDDAModel::discTypeString() const {
- switch (disc_type) {
- case DiscContainsAudioTracks : return i18n("Audio disc");
- case DiscContainsNoAudioTracks : return i18n("No audio disc");
- default : ;
- }
- return i18n("No disc type information available");
-}
-
-CDDAModel::DiscInfo CDDAModel::discInfo() const {
- return disc_info;
-}
-
-const QString CDDAModel::discInfoString() const {
- switch (disc_info) {
- case DiscCDTEXTInfo : return i18n("CD-Text");
- case DiscCDDBInfo : return i18n("CDDB");
- case DiscPhononMetadataInfo : return i18n("Phonon Metadata");
- default : ;
- }
- return i18n("No disc information available");
-}
-
void CDDAModel::lookupCDDB() {
- if (compact_disc->isNoDisc() || compact_disc->discId()==0) return;
+ if (!pn) return;
kDebug() << "lookupCDDB called";
@@ -745,13 +677,13 @@ void CDDAModel::lookupCDDB() {
cddb->config().reparse();
cddb->setBlockingMode(FALSE);
- cddb->lookup(compact_disc->discSignature());
+ cddb->lookup(pn->discSignature());
}
bool CDDAModel::submitCDDB() {
- if (compact_disc->isNoDisc() || (compact_disc->discId()==0)) return TRUE;
+ if (!pn) return TRUE;
kDebug() << "submitCDDB called";
@@ -768,7 +700,7 @@ bool CDDAModel::submitCDDB() {
if (category().isEmpty()) {
setCategory("rock");
}
- KCDDB::Result result = cddb->submit(cd_info, compact_disc->discSignature());
+ KCDDB::Result result = cddb->submit(cd_info, pn->discSignature());
if (result != KCDDB::Success) {
switch (result) {
@@ -799,104 +731,57 @@ bool CDDAModel::submitCDDB() {
}
void CDDAModel::eject() {
- compact_disc->eject();
+ solid->requestEject(_udi);
}
-void CDDAModel::play(const unsigned int track) {
- compact_disc->playTrack(track);
-}
+void CDDAModel::new_audio_disc_available(const QString& udi) {
-void CDDAModel::playPos(const unsigned int position) {
- compact_disc->playPosition(position);
-}
+ _device = solid->blockDevice(udi);
+ _udi = udi;
-unsigned int CDDAModel::position() const {
- return compact_disc->trackPosition();
-}
-
-void CDDAModel::prev() {
- compact_disc->prev();
-}
-
-void CDDAModel::next() {
- compact_disc->next();
-}
-
-void CDDAModel::pause() {
- compact_disc->pause();
-}
-
-void CDDAModel::stop() {
- compact_disc->stop();
-}
-
-void CDDAModel::slot_disc_changed(unsigned int tracks) {
+ pn = new CDDAParanoia(this);
+ if (!pn) {
+ kDebug() << "Unable to create paranoia class. low mem?";
+ error = Error(i18n("Unable to create CDDA paranoia object."), i18n("This is an \
internal error. Check your hardware. If all okay please make bug report."), \
Error::ERROR, this); + return;
+ }
+ pn->setDevice(_device);
- kDebug() << "driveChanged (" << tracks << ")";
+ kDebug() << "new audio disc detected (" << udi << ")";
clear();
confirm();
sel_tracks.clear();
- for (unsigned int i = 1; i <= tracks; ++i) {
+ for (int i = 1; i <= pn->numOfTracks(); ++i) {
if (isAudioTrack(i)) sel_tracks.insert(i);
}
emit hasSelection(0 != sel_tracks.size());
- if (tracks > 0) disc_type = DiscContainsAudioTracks; else disc_type = \
DiscContainsNoAudioTracks;
- emit discChanged(disc_type);
+ emit audioDiscDetected();
}
-void CDDAModel::slot_disc_information(KCompactDisc::DiscInfo info) {
-
- kDebug() << "infoChanged (" << info << ")";
+void CDDAModel::audio_disc_removed(const QString& udi) {
- switch (info) {
- case KCompactDisc::Cdtext : disc_info = DiscCDTEXTInfo; break;
- case KCompactDisc::Cddb : disc_info = DiscCDDBInfo; break;
- case KCompactDisc::PhononMetadata : disc_info = DiscPhononMetadataInfo; break;
- }
+ kDebug() << "audio disc removed (" << udi << ")";
- set_default_values();
- setVarious(guessVarious());
- reset();
+ _device.clear();
+ _udi.clear();
- emit discInfoChanged(disc_info);
+ if (pn) delete pn;
+ pn = NULL;
}
-void CDDAModel::slot_disc_status_changed(KCompactDisc::DiscStatus status) {
+void CDDAModel::disc_information_modified() {
- kDebug() << "statusChanged (" << status << ")";
+ kDebug() << "disc info changed";
- DriveStatus ds = drive_status;
-
- switch (status) {
-
- case KCompactDisc::Playing : disc_status = DiscPlaying; drive_status = \
DriveReady; break;
- case KCompactDisc::Paused : disc_status = DiscPaused; drive_status = DriveReady; \
break;
- case KCompactDisc::Stopped : disc_status = DiscStopped; drive_status = \
DriveReady; break;
-
- case KCompactDisc::Ejected : disc_status = DiscNoStatus; drive_status = \
DriveOpen; break;
- case KCompactDisc::NoDisc : disc_status = DiscNoStatus; drive_status = \
DriveEmpty; break;
- case KCompactDisc::NotReady : disc_status = DiscNoStatus; drive_status = \
DriveNotReady; break;
- case KCompactDisc::Error : disc_status = DiscNoStatus; drive_status = \
DriveError; break;
-
- default : break;
-
- }
-
- if (disc_status == DiscNoStatus) {
- disc_info = DiscNoInfo;
- emit discInfoChanged(disc_info);
- }
-
- if (ds != drive_status) emit driveStatusChanged(drive_status);
- emit discStatusChanged(disc_status);
-
- stop();
+ set_default_values();
+ setVarious(guessVarious());
+ reset();
}
@@ -912,10 +797,7 @@ void CDDAModel::lookup_cddb_done(KCDDB::Result result) {
case KCDDB::NoRecordFound : ;
case KCDDB::MultipleRecordFound : ;
case KCDDB::Success : ;
- default : if (disc_info == DiscNoInfo)
- error = Error(KCDDB::resultToString(result), i18n("This means no data \
found in the CDDB database. Please enter the data manually. Maybe try another CDDB \
server."), Error::ERROR, this);
- else
- error = Error(KCDDB::resultToString(result), i18n("This means no data found in \
the CDDB database."), Error::ERROR, this); + default : error = \
Error(KCDDB::resultToString(result), i18n("This means no data found in the CDDB \
database."), Error::ERROR, this); }
emit cddbLookupDone(FALSE);
return;
@@ -938,7 +820,7 @@ void CDDAModel::lookup_cddb_done(KCDDB::Result result) {
NULL);
if (ok) {
- // The user selected and item and pressed OK
+ // The user selected an item and pressed OK
int c = 0;
for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) {
if (*it==res) break;
@@ -948,16 +830,15 @@ void CDDAModel::lookup_cddb_done(KCDDB::Result result) {
} else {
emit cddbLookupDone(TRUE);
return;
- // user pressed Cancel
+ // user pressed cancel
}
}
cd_info = info;
set_default_values();
- disc_info = DiscCDDBInfo;
setVarious(guessVarious());
- if(isVarious() && QLatin1String("Various")==artist()) {
+ if (isVarious() && QLatin1String("Various") == artist()) {
setArtist(i18n("Various Artists"));
}
@@ -972,9 +853,9 @@ void CDDAModel::lookup_cddb_done(KCDDB::Result result) {
cddb_transaction_pending = FALSE;
- emit cddbLookupDone(TRUE);
+ _empty = FALSE;
- emit discInfoChanged(disc_info);
+ emit cddbLookupDone(TRUE);
}
@@ -1014,7 +895,8 @@ void CDDAModel::set_default_values() {
void CDDAModel::modify() {
- modified = TRUE; emit cddbDataModified();
- if (disc_info==DiscNoInfo) { disc_info = DiscManualInfo; emit \
discInfoChanged(disc_info); } + modified = TRUE;
+ _empty = FALSE;
+ emit cddbDataModified();
}
diff --git a/models/cddamodel.h b/models/cddamodel.h
index c4758e4..4b837bb 100644
--- a/models/cddamodel.h
+++ b/models/cddamodel.h
@@ -28,17 +28,19 @@
#include <QModelIndexList>
#include <QSet>
#include <QRegExp>
+#include <QTimer>
#include <KDebug>
#include <KLocale>
#include <KInputDialog>
#include <KMimeType>
-#include <libkcompactdisc/kcompactdisc.h>
#include <libkcddb/kcddb.h>
#include <libkcddb/client.h>
#include <libkcddb/cdinfo.h>
+#include "utils/cddasolid.h"
+#include "utils/cddaparanoia.h"
#include "utils/cachedimage.h"
#include "utils/error.h"
@@ -67,10 +69,10 @@ class CDDAModel : public QAbstractTableModel {
Q_OBJECT
public:
- CDDAModel(QObject *parent = 0, const QString& device = "/dev/cdrom");
+ CDDAModel(QObject *parent = 0);
~CDDAModel();
- void setDevice(const QString& device);
+ inline CDDAParanoia *paranoia() const { return pn; }
inline const QString& device() const { return _device; }
int rowCount(const QModelIndex &parent = QModelIndex()) const;
@@ -150,6 +152,8 @@ public:
void clear();
+ inline bool empty() { return _empty; }
+
inline const QSet<int>& selectedTracks() const { return sel_tracks; }
void toggle(int row);
bool isTrackInSelection(int n) const;
@@ -162,66 +166,15 @@ public:
Error lastError() const;
- enum DriveStatus {
- DriveNoStatus,
- DriveEmpty,
- DriveReady,
- DriveOpen,
- DriveNotReady,
- DriveError
- };
-
- enum DiscStatus {
- DiscNoStatus,
- DiscPlaying,
- DiscPaused,
- DiscStopped
- };
-
- enum DiscType {
- DiscNoType,
- DiscContainsAudioTracks,
- DiscContainsNoAudioTracks
- };
-
- enum DiscInfo {
- DiscNoInfo,
- DiscManualInfo, /*user input*/
- DiscCDTEXTInfo,
- DiscCDDBInfo,
- DiscPhononMetadataInfo
- };
-
- DriveStatus driveStatus() const;
- const QString driveStatusString() const;
-
- DiscStatus discStatus() const;
- const QString discStatusString() const;
-
- DiscType discType() const;
- const QString discTypeString() const;
-
- DiscInfo discInfo() const;
- const QString discInfoString() const;
-
public slots:
void lookupCDDB();
bool submitCDDB();
- void eject();
- void play(const unsigned int track = 1);
- void playPos(const unsigned int position);
- unsigned int position() const;
- void prev();
- void next();
- void pause();
- void stop();
+ void eject();
signals:
- void driveStatusChanged(const CDDAModel::DriveStatus status);
- void discStatusChanged(const CDDAModel::DiscStatus status);
- void discChanged(const CDDAModel::DiscType type);
- void discInfoChanged(const CDDAModel::DiscInfo info);
+ void audioDiscDetected();
+ void audioDiscRemoved();
void cddbLookupStarted();
void cddbLookupDone(const bool successful);
@@ -233,23 +186,24 @@ signals:
void selectionChanged(const int num_selected);
private slots:
- void slot_disc_changed(unsigned int tracks);
- void slot_disc_information(KCompactDisc::DiscInfo info);
- void slot_disc_status_changed(KCompactDisc::DiscStatus status);
+ void new_audio_disc_available(const QString& udi);
+ void audio_disc_removed(const QString& udi);
+
+ void disc_information_modified();
void lookup_cddb_done(KCDDB::Result result);
private:
QString _device;
- KCompactDisc *compact_disc;
+ QString _udi;
+ CDDAParanoia *pn;
+ CDDASolid *solid;
+
KCDDB::Client *cddb;
KCDDB::CDInfo cd_info;
CachedImage *_cover;
bool modified;
- DriveStatus drive_status;
- DiscStatus disc_status;
- DiscType disc_type;
- DiscInfo disc_info;
+ bool _empty; // no metadata available yet
Error error;
bool cddb_transaction_pending;
diff --git a/utils/cddaextractthread.cpp b/utils/cddaextractthread.cpp
index 46727ff..79362c5 100644
--- a/utils/cddaextractthread.cpp
+++ b/utils/cddaextractthread.cpp
@@ -24,16 +24,15 @@ void paranoiaCallback(long sector, int status) {
aet->createStatus(sector, status);
}
-CDDAExtractThread::CDDAExtractThread(QObject* parent, const QString& device) : \
QThread(parent) { +CDDAExtractThread::CDDAExtractThread(QObject* parent, CDDAParanoia \
*_paranoia) : QThread(parent) {
- paranoia = new CDDAParanoia(this);
+ paranoia = _paranoia;
if (!paranoia) {
- kDebug() << "Unable to create paranoia class. low mem?";
+ kDebug() << "Paranoia object not found. low mem?";
emit error(i18n("Internal device error."), i18n("Check your device and make a \
bug report.")); return;
}
connect(paranoia, SIGNAL(error(const QString&, const QString&)), this, \
SLOT(slot_error(const QString&, const QString&)));
- paranoia->setDevice(device);
overall_sectors_read = 0;
paranoia_mode = 3;
@@ -51,8 +50,6 @@ CDDAExtractThread::CDDAExtractThread(QObject* parent, const \
QString& device) : Q
CDDAExtractThread::~CDDAExtractThread() {
- delete paranoia;
-
}
void CDDAExtractThread::start() {
diff --git a/utils/cddaextractthread.h b/utils/cddaextractthread.h
index 50fddee..1091ee9 100644
--- a/utils/cddaextractthread.h
+++ b/utils/cddaextractthread.h
@@ -30,7 +30,7 @@
class CDDAExtractThread : public QThread {
Q_OBJECT
public:
- CDDAExtractThread(QObject* parent = 0, const QString& device = "/dev/cdrom");
+ CDDAExtractThread(QObject* parent, CDDAParanoia *_paranoia);
~CDDAExtractThread();
public slots:
diff --git a/utils/cddasolid.cpp b/utils/cddasolid.cpp
new file mode 100644
index 0000000..8face7b
--- /dev/null
+++ b/utils/cddasolid.cpp
@@ -0,0 +1,152 @@
+/*
+ * AUDEX CDDA EXTRACTOR
+ *
+ * Copyright (C) 2007-2013 Marco Nelles (audex@maniatek.com)
+ * <http://kde.maniatek.com/audex>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "cddasolid.h"
+
+CDDASolid::CDDASolid(QObject *parent) {
+
+ Q_UNUSED(parent);
+
+ connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceAdded(const QString&)), \
this, SLOT(p_solid_device_added(const QString&))); + \
connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceRemoved(const QString&)), \
this, SLOT(p_solid_device_removed(const QString&))); +
+}
+
+CDDASolid::~CDDASolid() {
+
+ p_clear();
+
+}
+
+const QString CDDASolid::blockDevice(const QString& udi) const {
+
+ OpticalAudioDisc *disc = p_discs.value(udi, NULL);
+ if (!disc) return QString();
+
+ const Solid::GenericInterface *gen = disc->device.as<Solid::GenericInterface>();
+ return gen->allProperties().value("DeviceFile").toString();
+
+}
+
+int CDDASolid::discCount() const {
+
+ return p_discs.count();
+
+}
+
+void CDDASolid::scanBus() {
+
+ p_clear();
+
+ QList<Solid::Device> list = \
Solid::Device::listFromType(Solid::DeviceInterface::OpticalDisc, QString()); +
+ for (int i = 0; i < list.count(); ++i) {
+ p_solid_device_added(list.value(i).udi());
+ }
+
+}
+
+void CDDASolid::requestEject(const QString& udi) {
+
+ OpticalAudioDisc *disc = p_discs.value(udi, NULL);
+ if (!disc) return;
+
+ Solid::Device device = disc->device;
+ if (!p_is_optical_audio_disc_in_drive(device)) return;
+ const Solid::GenericInterface *gen = device.as<Solid::GenericInterface>();
+
+ QString driveUdi = gen->allProperties().value("block.storage_device").toString();
+ Solid::Device device2(driveUdi);
+ if (device2.is<Solid::OpticalDrive>()) {
+ Solid::OpticalDrive *opticalDrive = device2.as<Solid::OpticalDrive>();
+ opticalDrive->eject();
+ }
+
+}
+
+void CDDASolid::setName(const QString& udi, const QString& name) {
+
+ OpticalAudioDisc *disc = p_discs.value(udi, NULL);
+ if (!disc) return;
+
+ if (disc->name != name) {
+ disc->name = name;
+ }
+
+}
+
+void CDDASolid::p_solid_device_added(const QString& udi) {
+
+ Solid::Device device(udi);
+
+ kDebug() << "Device found:" << device.udi();
+ if (p_is_optical_audio_disc_in_drive(device)) {
+ kDebug() << "is audio.";
+ OpticalAudioDisc *disc = new OpticalAudioDisc();
+ disc->name = i18n("Audio Disc");
+ disc->device = device;
+ p_discs.insert(udi, disc);
+ emit audioDiscDetected(udi);
+ }
+
+}
+
+void CDDASolid::p_solid_device_removed(const QString& udi) {
+
+ OpticalAudioDisc *disc = p_discs.value(udi, NULL);
+
+ kDebug() << "Optical audio disc removed:" << udi;
+
+ if (disc) delete disc;
+
+ p_discs.remove(udi);
+ emit audioDiscRemoved(udi);
+
+}
+
+bool CDDASolid::p_is_optical_audio_disc_in_drive(const Solid::Device& device) const \
{ +
+ if (device.is<Solid::OpticalDisc>()) {
+ const Solid::OpticalDisc *disc = device.as<Solid::OpticalDisc>();
+ kDebug() << "Detected disc type:" << disc->discType();
+ //TODO: There are some drives always reporting discType unknown (-1).
+ //Needs some more testing
+ /*if ((disc->discType() == Solid::OpticalDisc::CdRom) ||
+ (disc->discType() == Solid::OpticalDisc::CdRecordable) ||
+ (disc->discType() == Solid::OpticalDisc::CdRewritable)) {
+ return (disc->availableContent() & Solid::OpticalDisc::Audio);
+ }*/
+ return (disc->availableContent() & Solid::OpticalDisc::Audio);
+ }
+ return FALSE;
+
+}
+
+void CDDASolid::p_clear() {
+
+ QHash<QString, OpticalAudioDisc*>::const_iterator i = p_discs.constBegin();
+ while (i != p_discs.constEnd()) {
+ if (i.value()) delete i.value();
+ ++i;
+ }
+ p_discs.clear();
+
+}
diff --git a/utils/cddasolid.h b/utils/cddasolid.h
new file mode 100644
index 0000000..7b0a9e5
--- /dev/null
+++ b/utils/cddasolid.h
@@ -0,0 +1,85 @@
+/*
+ * AUDEX CDDA EXTRACTOR
+ *
+ * Copyright (C) 2007-2013 Marco Nelles (audex@maniatek.com)
+ * <http://kde.maniatek.com/audex>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef CDDASOLID_H
+#define CDDASOLID_H
+
+#include <QAbstractTableModel>
+#include <QString>
+#include <QStringList>
+
+#include <KIcon>
+#include <KDebug>
+#include <KLocale>
+
+#include <Solid/Device>
+#include <Solid/StorageAccess>
+#include <Solid/OpticalDrive>
+#include <Solid/OpticalDisc>
+#include <Solid/DeviceNotifier>
+#include <Solid/DeviceInterface>
+#include <Solid/Block>
+#include <Solid/GenericInterface>
+
+struct OpticalAudioDisc {
+ QString name;
+ Solid::Device device;
+};
+
+class CDDASolid : public QObject {
+
+ Q_OBJECT
+
+public:
+ CDDASolid(QObject *parent = 0);
+ ~CDDASolid();
+
+ const QString blockDevice(const QString& udi) const;
+
+ const QStringList udiList() const;
+ int discCount() const;
+
+public slots:
+ void scanBus();
+
+ void requestEject(const QString& udi);
+
+ //set display name
+ void setName(const QString& udi, const QString& name);
+
+signals:
+ void audioDiscDetected(const QString& udi);
+ void audioDiscRemoved(const QString& udi);
+
+private slots:
+ void p_solid_device_added(const QString& udi);
+ void p_solid_device_removed(const QString& udi);
+
+private:
+ QHash<QString, OpticalAudioDisc*> p_discs;
+
+ bool p_is_optical_audio_disc_in_drive(const Solid::Device& device) const;
+
+ void p_clear();
+
+};
+
+#endif
diff --git a/widgets/cddaheaderwidget.cpp b/widgets/cddaheaderwidget.cpp
index 437184b..5bcfca0 100644
--- a/widgets/cddaheaderwidget.cpp
+++ b/widgets/cddaheaderwidget.cpp
@@ -389,7 +389,7 @@ void CDDAHeaderWidget::googleAuto() {
kDebug() << "Google AUTO cover fetch" ;
- if ((cdda_model->discInfo()==CDDAModel::DiscNoInfo) || \
(fetching_cover_in_progress)) return; + if ((cdda_model->empty()) || \
(fetching_cover_in_progress)) return;
QApplication::restoreOverrideCursor();
cursor_on_cover = FALSE;
@@ -518,7 +518,7 @@ void CDDAHeaderWidget::paintEvent(QPaintEvent *event) {
font.setBold(TRUE);
font.setItalic(TRUE);
p.setFont(font);
- p.drawText(rect(), Qt::AlignCenter | Qt::AlignVCenter, i18n("No CD in drive"));
+ p.drawText(rect(), Qt::AlignCenter | Qt::AlignVCenter, i18n("No audio CD \
detected"));
}
@@ -561,7 +561,7 @@ void CDDAHeaderWidget::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
if ((cursor_on_cover) && (!fetching_cover_in_progress)) {
if (cdda_model->isCoverEmpty()) {
- if (cdda_model->discInfo() == CDDAModel::DiscNoInfo) {
+ if (cdda_model->empty()) {
load();
} else {
google();
@@ -577,7 +577,7 @@ void CDDAHeaderWidget::mousePressEvent(QMouseEvent *event) {
void CDDAHeaderWidget::update() {
- action_collection->action("fetch")->setEnabled(cdda_model->discInfo() != \
CDDAModel::DiscNoInfo); + \
action_collection->action("fetch")->setEnabled(!cdda_model->empty());
bool activate = FALSE;
if (cdda_model->isCoverEmpty()) {
@@ -656,7 +656,7 @@ void CDDAHeaderWidget::google() {
kDebug() << "Google cover fetch" ;
- if ((cdda_model->discInfo() == CDDAModel::DiscNoInfo) || \
(fetching_cover_in_progress)) return; + if ((cdda_model->empty()) || \
(fetching_cover_in_progress)) return;
QApplication::restoreOverrideCursor();
cursor_on_cover = FALSE;
diff --git a/widgets/devicewidget.cpp b/widgets/devicewidget.cpp
index 228efc1..c749009 100644
--- a/widgets/devicewidget.cpp
+++ b/widgets/devicewidget.cpp
@@ -22,17 +22,6 @@ deviceWidget::deviceWidget(QWidget* parent) : \
deviceWidgetUI(parent) {
Q_UNUSED(parent);
- QStringList devices = KCompactDisc::cdromDeviceNames();
- kcfg_cdDevice->clear();
-
- if (devices.isEmpty()) {
- kcfg_cdDevice->addItem(i18n("None detected"));
- } else {
- foreach (const QString &dev, devices) {
- kcfg_cdDevice->addItem(dev + " (" + KCompactDisc::cdromDeviceUrl(dev).path() + \
")");
- }
- }
-
}
deviceWidget::~deviceWidget() {
diff --git a/widgets/devicewidgetUI.ui b/widgets/devicewidgetUI.ui
index e57d370..4df6efa 100644
--- a/widgets/devicewidgetUI.ui
+++ b/widgets/devicewidgetUI.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>268</width>
+ <width>274</width>
<height>269</height>
</rect>
</property>
@@ -18,27 +18,20 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
- <layout class="QHBoxLayout" name="_3">
- <item>
- <widget class="KComboBox" name="kcfg_cdDevice"/>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
<widget class="QCheckBox" name="kcfg_paranoiaMode">
<property name="text">
<string>Full paranoia mode (best quality)</string>
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="1" column="0">
<widget class="QCheckBox" name="kcfg_neverSkip">
<property name="text">
<string>Never skip on read error</string>
</property>
</widget>
</item>
- <item row="3" column="0">
+ <item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
@@ -92,11 +85,6 @@
</widget>
<customwidgets>
<customwidget>
- <class>KComboBox</class>
- <extends>QComboBox</extends>
- <header>kcombobox.h</header>
- </customwidget>
- <customwidget>
<class>KIntSpinBox</class>
<extends>QSpinBox</extends>
<header>knuminput.h</header>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic