File indexing completed on 2024-05-19 04:03:04

0001 /*
0002     SPDX-FileCopyrightText: 2010 Aleix Pol Gonzalez <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_PLUGIN_REVIEWBOARDJOBS_H
0008 #define KDEVPLATFORM_PLUGIN_REVIEWBOARDJOBS_H
0009 
0010 #include <QList>
0011 #include <QNetworkAccessManager>
0012 #include <QPair>
0013 #include <QUrl>
0014 
0015 #include <KJob>
0016 
0017 class QNetworkReply;
0018 
0019 namespace ReviewBoard
0020 {
0021 /**
0022  * Http call to the specified service.
0023  * Converts returned json data to a QVariant to be used from actual API calls
0024  *
0025  * @note It is reviewboard-agnostic.
0026  */
0027 class HttpCall : public KJob
0028 {
0029     Q_OBJECT
0030     Q_PROPERTY(QVariant result READ result)
0031 public:
0032     enum Method {
0033         Get,
0034         Put,
0035         Post,
0036     };
0037 
0038     HttpCall(const QUrl &s,
0039              const QString &apiPath,
0040              const QList<QPair<QString, QString>> &queryParameters,
0041              Method m,
0042              const QByteArray &post,
0043              bool multipart,
0044              QObject *parent);
0045 
0046     void start() override;
0047 
0048     QVariant result() const;
0049 
0050 private Q_SLOTS:
0051     void onFinished();
0052 
0053 private:
0054     // TODO: change to QJsonObject
0055     QVariant m_result;
0056     QNetworkReply *m_reply;
0057     QUrl m_requrl;
0058     QByteArray m_post;
0059 
0060     QNetworkAccessManager m_manager;
0061     bool m_multipart;
0062     Method m_method;
0063 };
0064 
0065 class ReviewRequest : public KJob
0066 {
0067     Q_OBJECT
0068 public:
0069     ReviewRequest(const QUrl &server, const QString &id, QObject *parent)
0070         : KJob(parent)
0071         , m_server(server)
0072         , m_id(id)
0073     {
0074     }
0075     QString requestId() const
0076     {
0077         return m_id;
0078     }
0079     void setRequestId(QString id)
0080     {
0081         m_id = id;
0082     }
0083     QUrl server() const
0084     {
0085         return m_server;
0086     }
0087 
0088 private:
0089     QUrl m_server;
0090     QString m_id;
0091 };
0092 
0093 class NewRequest : public ReviewRequest
0094 {
0095     Q_OBJECT
0096 public:
0097     NewRequest(const QUrl &server, const QString &project, QObject *parent = nullptr);
0098     void start() override;
0099 
0100 private Q_SLOTS:
0101     void done();
0102 
0103 private:
0104     HttpCall *m_newreq;
0105     QString m_project;
0106 };
0107 
0108 class UpdateRequest : public ReviewRequest
0109 {
0110     Q_OBJECT
0111 public:
0112     UpdateRequest(const QUrl &server, const QString &id, const QVariantMap &newValues, QObject *parent = nullptr);
0113     void start() override;
0114 
0115 private Q_SLOTS:
0116     void done();
0117 
0118 private:
0119     HttpCall *m_req;
0120     QString m_project;
0121 };
0122 
0123 class SubmitPatchRequest : public ReviewRequest
0124 {
0125     Q_OBJECT
0126 public:
0127     SubmitPatchRequest(const QUrl &server, const QUrl &patch, const QString &basedir, const QString &id, QObject *parent = nullptr);
0128     void start() override;
0129 
0130 private Q_SLOTS:
0131     void done();
0132 
0133 private:
0134     HttpCall *m_uploadpatch;
0135     QUrl m_patch;
0136     QString m_basedir;
0137 };
0138 
0139 class ProjectsListRequest : public KJob
0140 {
0141     Q_OBJECT
0142 public:
0143     ProjectsListRequest(const QUrl &server, QObject *parent = nullptr);
0144     void start() override;
0145     QVariantList repositories() const;
0146 
0147 private Q_SLOTS:
0148     void requestRepositoryList(int startIndex);
0149     void done(KJob *done);
0150 
0151 private:
0152     QUrl m_server;
0153     QVariantList m_repositories;
0154 };
0155 
0156 class ReviewListRequest : public KJob
0157 {
0158     Q_OBJECT
0159 public:
0160     ReviewListRequest(const QUrl &server, const QString &user, const QString &reviewStatus, QObject *parent = nullptr);
0161     void start() override;
0162     QVariantList reviews() const;
0163 
0164 private Q_SLOTS:
0165     void requestReviewList(int startIndex);
0166     void done(KJob *done);
0167 
0168 private:
0169     QUrl m_server;
0170     QString m_user;
0171     QString m_reviewStatus;
0172     QVariantList m_reviews;
0173 };
0174 
0175 QByteArray urlToData(const QUrl &);
0176 }
0177 
0178 #endif