From 9b4510f51863bd12cf787e9b07eb72a4bcbc66bd Mon Sep 17 00:00:00 2001 From: Digital Artifex <7929434+DigitalArtifex@users.noreply.github.com> Date: Tue, 9 Jun 2026 00:24:40 -0400 Subject: [PATCH] Moved generic functionality to WallpaperPaginator --- .../paginators/newestpackspaginator.h | 162 +----------------- 1 file changed, 4 insertions(+), 158 deletions(-) diff --git a/KomplexHubPlugin/paginators/newestpackspaginator.h b/KomplexHubPlugin/paginators/newestpackspaginator.h index 25685ac..37438b5 100644 --- a/KomplexHubPlugin/paginators/newestpackspaginator.h +++ b/KomplexHubPlugin/paginators/newestpackspaginator.h @@ -29,170 +29,16 @@ #include #include -#include "common/logging.h" -#include "common/paginator.h" -#include "common/wallpapercache.h" -#include "common/coreservices.h" +#include "wallpaperpaginator.h" -class KOMPLEX_EXPORT NewestPacksPaginator : public Paginator +class KOMPLEX_EXPORT NewestPacksPaginator : public WallpaperPaginator { - public: - explicit NewestPacksPaginator() : Paginator() + explicit NewestPacksPaginator() : WallpaperPaginator() { - SlidingCacheController *controller = this->controller(); - controller->setFetch( - std::bind(&NewestPacksPaginator::fetch, this, std::placeholders::_1, std::placeholders::_2) - ); - } - -protected: - /** - * @brief fetch - * Used to fetch results from the API endpoint - * for the CacheController. It is intended to be passed - * to the Cache Controller not meant to be called directly. - * @param offset Offset index to start the results from - * @param limit Number of results to attempt to fetch - * @return FetchResult - */ - auto fetch( - qsizetype offset, - qsizetype limit - ) const -> FetchResult - { - QUrl url( + setUri( QString::fromUtf8("%1/v2/packs/newest/").arg(KOMPLEX_API_HOST) ); - - QNetworkRequest request(url); - request.setHeaders( - QHttpHeaders::fromMultiMap( - { - { - QByteArray("Offset"), - QString::number(offset).toUtf8() - }, - { - QByteArray("Limit"), - QString::number(limit).toUtf8() - }, - { - QByteArray("SessionToken"), - CoreServices::sessionToken() - } - } - ) - ); - - QNetworkReply *reply = getNetworkReply(request); - - if(reply == nullptr) - { - return {}; - } - - QJsonDocument document = getDocument(reply); - - QJsonObject rootObject = document.object(); - const QJsonArray resultsArray = rootObject.value(QString::fromUtf8("results")).toArray(); - - QList fetchedResults; - - for(const auto result : resultsArray) - { - if(!result.isObject()) - { - continue; - } - - QJsonObject resultObject = result.toObject(); - - fetchedResults.append( - { - resultObject.value(QString::fromUtf8("uri")).toString(), - resultObject.value(QString::fromUtf8("name")).toString(), - resultObject.value(QString::fromUtf8("author")).toString(), - resultObject.value(QString::fromUtf8("authorId")).toString(), - resultObject.value(QString::fromUtf8("description")).toString(), - resultObject.value(QString::fromUtf8("thumbnail")).toString(), - QDateTime::fromString( - resultObject.value(QString::fromUtf8("createdDate")).toString() - ), - resultObject.value(QString::fromUtf8("price")).toDouble(), - resultObject.value(QString::fromUtf8("currency")).toString(), - static_cast( - resultObject.value(QString::fromUtf8("downloadCount") - ).toInteger()), - static_cast( - resultObject.value(QString::fromUtf8("description") - ).toInt()), - } - ); - } - - return - { - static_cast(rootObject.value(QString::fromUtf8("total_results")).toInteger()), - fetchedResults.count(), - std::move(fetchedResults) - }; - } - - /** - * @brief getNetworkReply - * Processes the request and blocks until completion. - * @param request - * @return - */ - auto getNetworkReply(const QNetworkRequest &request) const -> QNetworkReply* - { - QEventLoop loop; - QWeakPointer managerReference = CoreServices::networkAccessManager(); - - QSharedPointer manager = managerReference.toStrongRef(); - - LOG_ERROR_X(!manager, - "NewestPacksPaginator::getNetworkReply", - "Network manager reference has already been deleted", - nullptr - ); - - QNetworkReply *reply = manager->post(request, nullptr); - QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); - QObject::connect(reply, &QNetworkReply::errorOccurred, &loop, - [&loop](QNetworkReply::NetworkError error) -> void - { - loop.quit(); - } - ); - - if(!reply->isFinished()) - { - loop.exec(); - } - - LOG_ERROR_X(reply->error() != QNetworkReply::NoError, - "NewestPacksPaginator::getNetworkReply", - reply->errorString().toStdString().c_str(), - nullptr - ); - - return reply; - } - - auto getDocument(QNetworkReply *reply) const -> QJsonDocument - { - QJsonParseError documentError; - QJsonDocument document = QJsonDocument::fromJson(reply->readAll(), &documentError); - - LOG_ERROR_X(documentError.error != QJsonParseError::NoError, - "NewestPacksPaginator::getDocument", - documentError.errorString().toStdString().c_str(), - {} - ); - - return document; } };