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