#include "./suggestionslookup.h" #include "./manager.h" #include "./repository.h" #include #include #include namespace RepoIndex { SuggestionsLookup::SuggestionsLookup(Manager &manager, const QJsonObject &request) : m_remainingReplies(0) { m_id = request.value(QStringLiteral("id")); const auto searchTerm = request.value(QStringLiteral("term")).toString(); if(searchTerm.isEmpty()) { m_errors << QStringLiteral("No search term specified."); } const auto repos = request.value(QStringLiteral("repos")).toArray(); if(repos.isEmpty()) { m_errors << QStringLiteral("No repositories specified."); } if(m_errors.isEmpty()) { for(const auto &repoName : repos) { if(const Repository *repo = manager.repositoryByName(repoName.toString())) { if(const auto *reply = repo->requestSuggestions(searchTerm)) { connect(reply, &SuggestionsReply::resultsAvailable, this, &SuggestionsLookup::addResults); ++m_remainingReplies; } else { m_results << repo->suggestions(searchTerm); } } else { m_errors << QStringLiteral("The specified repository \"%1\" does not exist.").arg(repoName.toString()); } } return; } deleteLater(); } void SuggestionsLookup::addResults() { assert(m_remainingReplies); auto *reply = static_cast(sender()); m_results << reply->suggestions(); reply->deleteLater(); if(!--m_remainingReplies) { emit resultsAvailable(QStringLiteral("suggestions"), m_id, m_results); deleteLater(); } } } // namespace RepoIndex