diff --git a/src/devices/cddasongloader.cpp b/src/devices/cddasongloader.cpp index 5d527d5df..fb25d3fe0 100644 --- a/src/devices/cddasongloader.cpp +++ b/src/devices/cddasongloader.cpp @@ -15,6 +15,8 @@ along with Clementine. If not, see . */ +#include + #include #include @@ -27,7 +29,9 @@ CddaSongLoader::CddaSongLoader(const QUrl& url, QObject* parent) : QObject(parent), url_(url), cdda_(nullptr), - cdio_(nullptr) {} + cdio_(nullptr) { + connect(this, SIGNAL(MusicBrainzDiscIdLoaded(const QString&)), SLOT(LoadAudioCDTags(const QString&))); +} CddaSongLoader::~CddaSongLoader() { if (cdio_) cdio_destroy(cdio_); @@ -42,6 +46,9 @@ QUrl CddaSongLoader::GetUrlFromTrack(int track_number) const { } void CddaSongLoader::LoadSongs() { + QtConcurrent::run(this, &CddaSongLoader::LoadSongsFromCdda); +} +void CddaSongLoader::LoadSongsFromCdda() { QMutexLocker locker(&mutex_load_); cdio_ = cdio_open(url_.path().toLocal8Bit().constData(), DRIVER_DEVICE); if (cdio_ == nullptr) { @@ -101,7 +108,6 @@ void CddaSongLoader::LoadSongs() { } emit SongsLoaded(songs); - gst_tag_register_musicbrainz_tags(); GstElement* pipeline = gst_pipeline_new("pipeline"); @@ -157,13 +163,8 @@ void CddaSongLoader::LoadSongs() { &string_mb)) { QString musicbrainz_discid(string_mb); qLog(Info) << "MusicBrainz discid: " << musicbrainz_discid; + emit MusicBrainzDiscIdLoaded(musicbrainz_discid); - MusicBrainzClient* musicbrainz_client = new MusicBrainzClient; - connect(musicbrainz_client, SIGNAL(Finished(const QString&, const QString&, - MusicBrainzClient::ResultList)), - SLOT(AudioCDTagsLoaded(const QString&, const QString&, - MusicBrainzClient::ResultList))); - musicbrainz_client->StartDiscIdRequest(musicbrainz_discid); g_free(string_mb); gst_message_unref(msg_tag); gst_tag_list_free(tags); @@ -175,6 +176,16 @@ void CddaSongLoader::LoadSongs() { gst_object_unref(pipeline); } +void CddaSongLoader::LoadAudioCDTags(const QString& musicbrainz_discid) const { + MusicBrainzClient* musicbrainz_client = new MusicBrainzClient; + connect(musicbrainz_client, SIGNAL(Finished(const QString&, const QString&, + MusicBrainzClient::ResultList)), + SLOT(AudioCDTagsLoaded(const QString&, const QString&, + MusicBrainzClient::ResultList))); + + musicbrainz_client->StartDiscIdRequest(musicbrainz_discid); +} + void CddaSongLoader::AudioCDTagsLoaded( const QString& artist, const QString& album, const MusicBrainzClient::ResultList& results) { diff --git a/src/devices/cddasongloader.h b/src/devices/cddasongloader.h index d62bcbac4..e809a9817 100644 --- a/src/devices/cddasongloader.h +++ b/src/devices/cddasongloader.h @@ -50,13 +50,16 @@ class CddaSongLoader : public QObject { void SongsLoaded(const SongList& songs); void SongsDurationLoaded(const SongList& songs); void SongsMetadataLoaded(const SongList& songs); + void MusicBrainzDiscIdLoaded(const QString& musicbrainz_discid); private slots: + void LoadAudioCDTags(const QString& musicbrainz_discid) const; void AudioCDTagsLoaded(const QString& artist, const QString& album, const MusicBrainzClient::ResultList& results); private: QUrl GetUrlFromTrack(int track_number) const; + void LoadSongsFromCdda(); QUrl url_; GstElement* cdda_;