From e3c367984bb7cd82aacc7795080ae3536c5fb693 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 14 May 2020 19:30:29 +0200 Subject: [PATCH] Make it possible to receive SearchResults before SearchFinished --- src/covermanager/albumcoverfetchersearch.cpp | 19 +++++++++++++++++-- src/covermanager/albumcoverfetchersearch.h | 2 ++ src/covermanager/coverprovider.h | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/covermanager/albumcoverfetchersearch.cpp b/src/covermanager/albumcoverfetchersearch.cpp index 0382bc5e6..7db62aecc 100644 --- a/src/covermanager/albumcoverfetchersearch.cpp +++ b/src/covermanager/albumcoverfetchersearch.cpp @@ -101,6 +101,7 @@ void AlbumCoverFetcherSearch::Start(CoverProviders *cover_providers) { continue; } + connect(provider, SIGNAL(SearchResults(int, CoverSearchResults)), SLOT(ProviderSearchResults(int, CoverSearchResults))); connect(provider, SIGNAL(SearchFinished(int, CoverSearchResults)), SLOT(ProviderSearchFinished(int, CoverSearchResults))); const int id = cover_providers->NextId(); const bool success = provider->StartSearch(request_.artist, request_.album, request_.title, id); @@ -118,10 +119,15 @@ void AlbumCoverFetcherSearch::Start(CoverProviders *cover_providers) { } -void AlbumCoverFetcherSearch::ProviderSearchFinished(const int id, const CoverSearchResults &results) { +void AlbumCoverFetcherSearch::ProviderSearchResults(const int id, const CoverSearchResults &results) { if (!pending_requests_.contains(id)) return; - CoverProvider *provider = pending_requests_.take(id); + CoverProvider *provider = pending_requests_[id]; + ProviderSearchResults(provider, results); + +} + +void AlbumCoverFetcherSearch::ProviderSearchResults(CoverProvider *provider, const CoverSearchResults &results) { CoverSearchResults results_copy(results); for (int i = 0 ; i < results_copy.count() ; ++i) { @@ -142,6 +148,15 @@ void AlbumCoverFetcherSearch::ProviderSearchFinished(const int id, const CoverSe results_.append(results_copy); statistics_.total_images_by_provider_[provider->name()]++; +} + +void AlbumCoverFetcherSearch::ProviderSearchFinished(const int id, const CoverSearchResults &results) { + + if (!pending_requests_.contains(id)) return; + + CoverProvider *provider = pending_requests_.take(id); + ProviderSearchResults(provider, results); + // Do we have more providers left? if (!pending_requests_.isEmpty()) { return; diff --git a/src/covermanager/albumcoverfetchersearch.h b/src/covermanager/albumcoverfetchersearch.h index 8091228e2..f50cd6721 100644 --- a/src/covermanager/albumcoverfetchersearch.h +++ b/src/covermanager/albumcoverfetchersearch.h @@ -66,6 +66,8 @@ class AlbumCoverFetcherSearch : public QObject { void AlbumCoverFetched(const quint64, const QUrl &cover_url, const QImage &cover); private slots: + void ProviderSearchResults(const int id, const CoverSearchResults &results); + void ProviderSearchResults(CoverProvider *provider, const CoverSearchResults &results); void ProviderSearchFinished(const int id, const CoverSearchResults &results); void ProviderCoverFetchFinished(QNetworkReply *reply); void TerminateSearch(); diff --git a/src/covermanager/coverprovider.h b/src/covermanager/coverprovider.h index 32e70e22d..fe0c4ef66 100644 --- a/src/covermanager/coverprovider.h +++ b/src/covermanager/coverprovider.h @@ -70,6 +70,7 @@ class CoverProvider : public QObject { void AuthenticationComplete(bool, QStringList = QStringList()); void AuthenticationSuccess(); void AuthenticationFailure(QStringList); + void SearchResults(int, CoverSearchResults); void SearchFinished(int, CoverSearchResults); private: