Use lambdas for QtConcurrent::run instead of NewClosure

This commit is contained in:
Jonas Kvinge
2020-07-18 16:28:39 +02:00
parent 425dac478e
commit af67de8aa6
12 changed files with 25 additions and 47 deletions

View File

@@ -27,10 +27,9 @@
#include <QObject> #include <QObject>
#include <QtGlobal> #include <QtGlobal>
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QThread> #include <QThread>
#include <QMutex> #include <QMutex>
#include <QFuture>
#include <QDataStream> #include <QDataStream>
#include <QMimeData> #include <QMimeData>
#include <QIODevice> #include <QIODevice>
@@ -52,7 +51,6 @@
#include <QtDebug> #include <QtDebug>
#include "core/application.h" #include "core/application.h"
#include "core/closure.h"
#include "core/database.h" #include "core/database.h"
#include "core/iconloader.h" #include "core/iconloader.h"
#include "core/logging.h" #include "core/logging.h"
@@ -859,18 +857,15 @@ void CollectionModel::LazyPopulate(CollectionItem *parent, const bool signal) {
} }
void CollectionModel::ResetAsync() { void CollectionModel::ResetAsync() {
QFuture<CollectionModel::QueryResult> future = QtConcurrent::run(this, &CollectionModel::RunQuery, root_); (void)QtConcurrent::run([=]() { ResetAsyncQueryFinished(RunQuery(root_)); });
NewClosure(future, this, SLOT(ResetAsyncQueryFinished(QFuture<CollectionModel::QueryResult>)), future);
} }
void CollectionModel::ResetAsyncQueryFinished(QFuture<CollectionModel::QueryResult> future) { void CollectionModel::ResetAsyncQueryFinished(QueryResult result) {
if (QThread::currentThread() != thread() && QThread::currentThread() != backend_->thread()) { if (QThread::currentThread() != thread() && QThread::currentThread() != backend_->thread()) {
backend_->Close(); backend_->Close();
} }
const struct QueryResult result = future.result();
BeginReset(); BeginReset();
root_->lazy_loaded = true; root_->lazy_loaded = true;

View File

@@ -27,7 +27,6 @@
#include <QtGlobal> #include <QtGlobal>
#include <QObject> #include <QObject>
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <QFuture>
#include <QDataStream> #include <QDataStream>
#include <QMetaType> #include <QMetaType>
#include <QPair> #include <QPair>
@@ -213,7 +212,7 @@ class CollectionModel : public SimpleTreeModel<CollectionItem> {
void ClearDiskCache(); void ClearDiskCache();
// Called after ResetAsync // Called after ResetAsync
void ResetAsyncQueryFinished(QFuture<CollectionModel::QueryResult> future); void ResetAsyncQueryFinished(QueryResult result);
void AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &result); void AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &result);

View File

@@ -25,8 +25,7 @@
#include <limits> #include <limits>
#include <QtGlobal> #include <QtGlobal>
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QFuture>
#include <QObject> #include <QObject>
#include <QWidget> #include <QWidget>
#include <QDialog> #include <QDialog>
@@ -286,16 +285,15 @@ void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemList &items) {
ui_->song_list->clear(); ui_->song_list->clear();
// Reload tags in the background // Reload tags in the background
QFuture<QList<Data>> future = QtConcurrent::run(this, &EditTagDialog::LoadData, s); (void)QtConcurrent::run([=]{ SetSongsFinished(LoadData(s)); });
NewClosure(future, this, SLOT(SetSongsFinished(QFuture<QList<EditTagDialog::Data>>)), future);
} }
void EditTagDialog::SetSongsFinished(QFuture<QList<Data>> future) { void EditTagDialog::SetSongsFinished(QList<Data> _data) {
if (!SetLoading(QString())) return; if (!SetLoading(QString())) return;
data_ = future.result(); data_ = _data;
if (data_.count() == 0) { if (data_.count() == 0) {
// If there were no valid songs, disable everything // If there were no valid songs, disable everything
ui_->song_list->setEnabled(false); ui_->song_list->setEnabled(false);

View File

@@ -27,7 +27,6 @@
#include <QObject> #include <QObject>
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <QDialog> #include <QDialog>
#include <QFuture>
#include <QList> #include <QList>
#include <QVariant> #include <QVariant>
#include <QString> #include <QString>
@@ -100,7 +99,7 @@ class EditTagDialog : public QDialog {
}; };
private slots: private slots:
void SetSongsFinished(QFuture<QList<EditTagDialog::Data>> future); void SetSongsFinished(QList<Data> _data);
void AcceptFinished(); void AcceptFinished();
void SelectionChanged(); void SelectionChanged();

View File

@@ -25,7 +25,7 @@
#include <QObject> #include <QObject>
#include <QCoreApplication> #include <QCoreApplication>
#include <QStandardPaths> #include <QStandardPaths>
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QFuture> #include <QFuture>
#include <QString> #include <QString>
#include <QDir> #include <QDir>
@@ -40,7 +40,7 @@
#include "gststartup.h" #include "gststartup.h"
GstStartup::GstStartup(QObject *parent) : QObject(parent) { GstStartup::GstStartup(QObject *parent) : QObject(parent) {
initialising_ = QtConcurrent::run(this, &GstStartup::InitialiseGStreamer); initialising_ = QtConcurrent::run([=]{ InitialiseGStreamer(); });
} }
GstStartup::~GstStartup() { GstStartup::~GstStartup() {

View File

@@ -25,7 +25,7 @@
#include <algorithm> #include <algorithm>
#include <QtGlobal> #include <QtGlobal>
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <QDialog> #include <QDialog>
#include <QScreen> #include <QScreen>
@@ -344,10 +344,9 @@ bool OrganiseDialog::SetUrls(const QList<QUrl> &urls) {
bool OrganiseDialog::SetFilenames(const QStringList &filenames) { bool OrganiseDialog::SetFilenames(const QStringList &filenames) {
songs_future_ = QtConcurrent::run(this, &OrganiseDialog::LoadSongsBlocking, filenames);
NewClosure(songs_future_, [=]() { SetSongs(songs_future_.result()); });
SetLoadingSongs(true); SetLoadingSongs(true);
songs_future_ = QtConcurrent::run([=]{ SetSongs(LoadSongsBlocking(filenames)); });
return true; return true;
} }

View File

@@ -117,7 +117,7 @@ class OrganiseDialog : public QDialog {
OrganiseFormat format_; OrganiseFormat format_;
QFuture<SongList> songs_future_; QFuture<void> songs_future_;
SongList songs_; SongList songs_;
Organise::NewSongInfoList new_songs_info_; Organise::NewSongInfoList new_songs_info_;
quint64 total_size_; quint64 total_size_;

View File

@@ -33,7 +33,7 @@
#include <QtGlobal> #include <QtGlobal>
#include <QObject> #include <QObject>
#include <QCoreApplication> #include <QCoreApplication>
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QFuture> #include <QFuture>
#include <QIODevice> #include <QIODevice>
#include <QDataStream> #include <QDataStream>
@@ -1314,17 +1314,15 @@ void Playlist::Restore() {
collection_items_by_id_.clear(); collection_items_by_id_.clear();
cancel_restore_ = false; cancel_restore_ = false;
QFuture<QList<PlaylistItemPtr>> future = QtConcurrent::run(backend_, &PlaylistBackend::GetPlaylistItems, id_);
NewClosure(future, this, SLOT(ItemsLoaded(QFuture<PlaylistItemList>)), future); (void)QtConcurrent::run([=]() { ItemsLoaded(backend_->GetPlaylistItems(id_)); });
} }
void Playlist::ItemsLoaded(QFuture<PlaylistItemList> future) { void Playlist::ItemsLoaded(PlaylistItemList items) {
if (cancel_restore_) return; if (cancel_restore_) return;
PlaylistItemList items = future.result();
// Backend returns empty elements for collection items which it couldn't match (because they got deleted); we don't need those // Backend returns empty elements for collection items which it couldn't match (because they got deleted); we don't need those
QMutableListIterator<PlaylistItemPtr> it(items); QMutableListIterator<PlaylistItemPtr> it(items);
while (it.hasNext()) { while (it.hasNext()) {
@@ -1353,7 +1351,7 @@ void Playlist::ItemsLoaded(QFuture<PlaylistItemList> future) {
// Should we gray out deleted songs asynchronously on startup? // Should we gray out deleted songs asynchronously on startup?
if (greyout) { if (greyout) {
QtConcurrent::run(this, &Playlist::InvalidateDeletedSongs); (void)QtConcurrent::run([=]() { InvalidateDeletedSongs(); });
} }
emit PlaylistLoaded(); emit PlaylistLoaded();

View File

@@ -29,7 +29,6 @@
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QPersistentModelIndex> #include <QPersistentModelIndex>
#include <QFuture>
#include <QList> #include <QList>
#include <QMap> #include <QMap>
#include <QMultiMap> #include <QMultiMap>
@@ -349,7 +348,7 @@ class Playlist : public QAbstractListModel {
void QueueLayoutChanged(); void QueueLayoutChanged();
void SongSaveComplete(TagReaderReply *reply, const QPersistentModelIndex &index); void SongSaveComplete(TagReaderReply *reply, const QPersistentModelIndex &index);
void ItemReloadComplete(const QPersistentModelIndex &index); void ItemReloadComplete(const QPersistentModelIndex &index);
void ItemsLoaded(QFuture<PlaylistItemList> future); void ItemsLoaded(PlaylistItemList items);
void SongInsertVetoListenerDestroyed(); void SongInsertVetoListenerDestroyed();
void AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &result); void AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &result);

View File

@@ -25,7 +25,7 @@
#include <QtGlobal> #include <QtGlobal>
#include <QObject> #include <QObject>
#include <QDialog> #include <QDialog>
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QFuture> #include <QFuture>
#include <QDir> #include <QDir>
#include <QFileDialog> #include <QFileDialog>
@@ -42,7 +42,6 @@
#include <QtDebug> #include <QtDebug>
#include "core/application.h" #include "core/application.h"
#include "core/closure.h"
#include "core/logging.h" #include "core/logging.h"
#include "core/player.h" #include "core/player.h"
#include "core/utilities.h" #include "core/utilities.h"
@@ -211,18 +210,11 @@ void PlaylistManager::Save(int id, const QString &filename, Playlist::Path path_
} }
else { else {
// Playlist is not in the playlist manager: probably save action was triggered from the left side bar and the playlist isn't loaded. // Playlist is not in the playlist manager: probably save action was triggered from the left side bar and the playlist isn't loaded.
QFuture<QList<Song>> future = QtConcurrent::run(playlist_backend_, &PlaylistBackend::GetPlaylistSongs, id); (void)QtConcurrent::run([=]() { parser_->Save(playlist_backend_->GetPlaylistSongs(id), filename, path_type); });
NewClosure(future, this, SLOT(ItemsLoadedForSavePlaylist(QFuture<SongList>, QString, Playlist::Path)), future, filename, path_type);
} }
} }
void PlaylistManager::ItemsLoadedForSavePlaylist(QFuture<SongList> future, const QString &filename, Playlist::Path path_type) {
parser_->Save(future.result(), filename, path_type);
}
void PlaylistManager::SaveWithUI(int id, const QString &playlist_name) { void PlaylistManager::SaveWithUI(int id, const QString &playlist_name) {
QSettings settings; QSettings settings;

View File

@@ -215,7 +215,6 @@ class PlaylistManager : public PlaylistManagerInterface {
void OneOfPlaylistsChanged(); void OneOfPlaylistsChanged();
void UpdateSummaryText(); void UpdateSummaryText();
void SongsDiscovered(const SongList& songs); void SongsDiscovered(const SongList& songs);
void ItemsLoadedForSavePlaylist(QFuture<SongList> future, const QString& filename, Playlist::Path path_type);
void PlaylistLoaded(); void PlaylistLoaded();
private: private:

View File

@@ -20,7 +20,7 @@
#include "config.h" #include "config.h"
#include <QtConcurrentRun> #include <QtConcurrent>
#include <QtAlgorithms> #include <QtAlgorithms>
#include <QList> #include <QList>
#include <QUrl> #include <QUrl>
@@ -83,7 +83,7 @@ void SongLoaderInserter::Load(Playlist *destination, int row, bool play_now, boo
deleteLater(); deleteLater();
} }
else { else {
QtConcurrent::run(this, &SongLoaderInserter::AsyncLoad); (void)QtConcurrent::run([=]{ AsyncLoad(); });
} }
} }