void SongLoaderInserter::AudioCDTagsLoaded(bool success) { SongLoader* loader = qobject_cast<SongLoader*>(sender()); if (!loader || !destination_) return; if (success) destination_->UpdateItems(loader->songs()); else qLog(Error) << "Error while getting audio CD metadata from MusicBrainz"; deleteLater(); }
// Load audio CD tracks: // First, we add tracks (without metadata) into the playlist // In the meantime, MusicBrainz will be queried to get songs' metadata. // AudioCDTagsLoaded will be called next, and playlist's items will be updated. void SongLoaderInserter::LoadAudioCD(Playlist* destination, int row, bool play_now, bool enqueue) { destination_ = destination; row_ = row; play_now_ = play_now; enqueue_ = enqueue; SongLoader* loader = new SongLoader(library_, player_, this); connect(loader, SIGNAL(LoadAudioCDFinished(bool)), SLOT(AudioCDTagsLoaded(bool))); qLog(Info) << "Loading audio CD..."; SongLoader::Result ret = loader->LoadAudioCD(); if (ret == SongLoader::Error) { emit Error(tr("Error while loading audio CD")); delete loader; } else { songs_ = loader->songs(); InsertSongs(); } }
void SongLoaderInserter::Load(Playlist* destination, int row, bool play_now, bool enqueue, const QList<QUrl>& urls) { destination_ = destination; row_ = row; play_now_ = play_now; enqueue_ = enqueue; connect(destination, SIGNAL(destroyed()), SLOT(DestinationDestroyed())); connect(this, SIGNAL(PreloadFinished()), SLOT(InsertSongs())); connect(this, SIGNAL(EffectiveLoadFinished(const SongList&)), destination, SLOT(UpdateItems(const SongList&))); for (const QUrl& url : urls) { SongLoader* loader = new SongLoader(library_, player_, this); SongLoader::Result ret = loader->Load(url); if (ret == SongLoader::BlockingLoadRequired) { pending_.append(loader); continue; } if (ret == SongLoader::Success) songs_ << loader->songs(); else emit Error(tr("Error loading %1").arg(url.toString())); delete loader; } if (pending_.isEmpty()) { InsertSongs(); deleteLater(); } else { QtConcurrent::run(this, &SongLoaderInserter::AsyncLoad); } }