File indexing completed on 2024-05-12 05:28:51
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 * SPDX-FileCopyrightText: 2017 Jan Grulich <jgrulich@redhat.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0006 */ 0007 0008 #pragma once 0009 0010 #include <ReviewsBackend/AbstractReviewsBackend.h> 0011 #include <ReviewsBackend/ReviewsModel.h> 0012 0013 #include <QJsonDocument> 0014 #include <QMap> 0015 #include <QNetworkReply> 0016 0017 class KJob; 0018 class AbstractResourcesBackend; 0019 class CachedNetworkAccessManager; 0020 0021 class DISCOVERCOMMON_EXPORT OdrsReviewsBackend : public AbstractReviewsBackend 0022 { 0023 Q_OBJECT 0024 public: 0025 static QSharedPointer<OdrsReviewsBackend> global(); 0026 explicit OdrsReviewsBackend(); 0027 ~OdrsReviewsBackend() override; 0028 0029 void login() override 0030 { 0031 } 0032 void logout() override 0033 { 0034 } 0035 void registerAndLogin() override 0036 { 0037 } 0038 0039 Rating *ratingForApplication(AbstractResource *resource) const override; 0040 bool hasCredentials() const override 0041 { 0042 return false; 0043 } 0044 bool supportsNameChange() const override 0045 { 0046 return true; 0047 } 0048 void deleteReview(Review *) override 0049 { 0050 } 0051 void fetchReviews(AbstractResource *resource, int page = 1) override; 0052 bool isFetching() const override 0053 { 0054 return m_isFetching; 0055 } 0056 void flagReview(Review *, const QString &, const QString &) override 0057 { 0058 } 0059 void submitUsefulness(Review *review, bool useful) override; 0060 bool isResourceSupported(AbstractResource *resource) const override; 0061 void emitRatingFetched(AbstractResourcesBackend *backend, const QList<AbstractResource *> &resources) const; 0062 QString errorMessage() const override 0063 { 0064 return m_errorMessage; 0065 } 0066 0067 QVector<Rating *> top() const 0068 { 0069 return m_top; 0070 } 0071 0072 private Q_SLOTS: 0073 void ratingsFetched(KJob *job); 0074 void reviewsFetched(); 0075 void reviewSubmitted(QNetworkReply *reply); 0076 void usefulnessSubmitted(); 0077 0078 Q_SIGNALS: 0079 void ratingsReady(); 0080 0081 protected: 0082 void sendReview(AbstractResource *resource, const QString &summary, const QString &reviewText, const QString &rating, const QString &userName) override; 0083 QString userName() const override; 0084 0085 private: 0086 void fetchRatings(); 0087 void setFetching(bool fetching); 0088 QNetworkAccessManager *nam(); 0089 void parseRatings(); 0090 void parseReviews(const QJsonDocument &document, AbstractResource *resource); 0091 0092 QString m_errorMessage; 0093 QHash<QString, Rating *> m_ratings; 0094 bool m_isFetching = false; 0095 CachedNetworkAccessManager *m_delayedNam = nullptr; 0096 0097 QVector<Rating *> m_top; 0098 };