Add better error handling for CDDA loader

This commit is contained in:
Jonas Kvinge
2020-04-07 16:48:12 +02:00
parent 16340fbb78
commit 3efc496c41
6 changed files with 73 additions and 28 deletions

View File

@@ -185,7 +185,7 @@ SongLoader::Result SongLoader::LoadAudioCD() {
#if defined(HAVE_AUDIOCD) && defined(HAVE_GSTREAMER)
if (player_->engine()->type() == Engine::GStreamer) {
CddaSongLoader *cdda_song_loader = new CddaSongLoader(QUrl(), this);
connect(cdda_song_loader, SIGNAL(SongsDurationLoaded(SongList)), this, SLOT(AudioCDTracksLoadedSlot(SongList)));
connect(cdda_song_loader, SIGNAL(SongsDurationLoaded(SongList, QString)), this, SLOT(AudioCDTracksLoadFinishedSlot(SongList, QString)));
connect(cdda_song_loader, SIGNAL(SongsMetadataLoaded(SongList)), this, SLOT(AudioCDTracksTagsLoaded(SongList)));
cdda_song_loader->LoadSongs();
return Success;
@@ -201,16 +201,22 @@ SongLoader::Result SongLoader::LoadAudioCD() {
}
#if defined(HAVE_AUDIOCD) && defined(HAVE_GSTREAMER)
void SongLoader::AudioCDTracksLoadedSlot(const SongList &songs) {
void SongLoader::AudioCDTracksLoadFinishedSlot(const SongList &songs, const QString &error) {
songs_ = songs;
emit AudioCDTracksLoaded();
errors_ << error;
emit AudioCDTracksLoadFinished();
}
void SongLoader::AudioCDTracksTagsLoaded(const SongList &songs) {
CddaSongLoader *cdda_song_loader = qobject_cast<CddaSongLoader*>(sender());
cdda_song_loader->deleteLater();
songs_ = songs;
emit LoadAudioCDFinished(true);
}
#endif

View File

@@ -57,7 +57,7 @@ class CddaSongLoader;
class SongLoader : public QObject {
Q_OBJECT
public:
SongLoader(CollectionBackendInterface *collection, const Player *player, QObject *parent = nullptr);
explicit SongLoader(CollectionBackendInterface *collection, const Player *player, QObject *parent = nullptr);
~SongLoader();
enum Result {
@@ -87,15 +87,15 @@ class SongLoader : public QObject {
QStringList errors() { return errors_; }
signals:
void AudioCDTracksLoaded();
void LoadAudioCDFinished(bool success);
void AudioCDTracksLoadFinished();
void LoadAudioCDFinished(const bool success);
void LoadRemoteFinished();
private slots:
void Timeout();
void StopTypefind();
#if defined(HAVE_AUDIOCD) && defined(HAVE_GSTREAMER)
void AudioCDTracksLoadedSlot(const SongList &songs);
void AudioCDTracksLoadFinishedSlot(const SongList &songs, const QString &error);
void AudioCDTracksTagsLoaded(const SongList &songs);
#endif // HAVE_AUDIOCD && HAVE_GSTREAMER