1#pragma once
2
3/****************************************************************************************
4 ** GitQlient is an application to manage and operate one or several Git repositories. With
5 ** GitQlient you will be able to add commits, branches and manage all the options Git provides.
6 ** Copyright (C) 2021 Francesc Martinez
7 **
8 ** LinkedIn: www.linkedin.com/in/cescmm/
9 ** Web: www.francescmm.com
10 **
11 ** This program is free software; you can redistribute it and/or
12 ** modify it under the terms of the GNU Lesser General Public
13 ** License as published by the Free Software Foundation; either
14 ** version 2 of the License, or (at your option) any later version.
15 **
16 ** This program is distributed in the hope that it will be useful,
17 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 ** Lesser General Public License for more details.
20 **
21 ** You should have received a copy of the GNU Lesser General Public
22 ** License along with this library; if not, write to the Free Software
23 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 ***************************************************************************************/
25
26#include <IRestApi.h>
27
28#include <QUrl>
29#include <QNetworkRequest>
30
31class QJsonDocument;
32class QNetworkReply;
33
34namespace GitServer
35{
36
37struct Issue;
38
39class GitHubRestApi final : public IRestApi
40{
41 Q_OBJECT
42
43public:
44 explicit GitHubRestApi(QString repoOwner, QString repoName, const ServerAuthentication &auth,
45 QObject *parent = nullptr);
46
47 void testConnection() override;
48 void createIssue(const Issue &issue) override;
49 void updateIssue(int issueNumber, const Issue &issue) override;
50 void updatePullRequest(int number, const PullRequest &pr) override;
51 void createPullRequest(const PullRequest &pullRequest) override;
52 void requestLabels() override;
53 void requestMilestones() override;
54 void requestIssues(int page = -1) override;
55 void requestPullRequests(int page = -1) override;
56 void mergePullRequest(int number, const QByteArray &data) override;
57 void requestComments(int issueNumber) override;
58 void requestReviews(int prNumber) override;
59 void requestCommitsFromPR(int prNumber) override;
60 void addIssueComment(const Issue &issue, const QString &text) override;
61 void addPrReview(int prNumber, const QString &body, const QString &event) override;
62 void addPrCodeReview(int prNumber, const QString &body, const QString &path, int pos, const QString &sha) override;
63 void replyCodeReview(int prNumber, int commentId, const QString &msgBody) override;
64
65private:
66 QString mRepoEndpoint;
67 QByteArray mAuthString;
68
69 QNetworkRequest createRequest(const QString &page) const override;
70 void onLabelsReceived();
71 void onMilestonesReceived();
72 void onIssueCreated();
73 void onPullRequestCreated();
74 void onPullRequestMerged();
75 void onPullRequestReceived();
76 void onPullRequestStatusReceived(PullRequest pr);
77 void onIssuesReceived();
78 void onCommentsReceived(int issueNumber);
79 void onPullRequestDetailsReceived(PullRequest pr);
80 void onReviewsReceived(int prNumber);
81
82 void requestReviewComments(int prNumber);
83 void onReviewCommentsReceived(int prNumber);
84 void onCommitsReceived(int prNumber);
85
86 Issue issueFromJson(const QJsonObject &json) const;
87 PullRequest prFromJson(const QJsonObject &json) const;
88};
89
90}
91