1 | /* |
2 | SPDX-FileCopyrightText: 2017 René J.V. Bertin <rjvbertin@gmail.com> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.0-or-later |
5 | */ |
6 | |
7 | #ifndef KDEVPLATFORM_PLUGIN_PHABRICATORJOBS_H |
8 | #define KDEVPLATFORM_PLUGIN_PHABRICATORJOBS_H |
9 | |
10 | #include <QHash> |
11 | #include <QList> |
12 | #include <QPair> |
13 | #include <QUrl> |
14 | |
15 | #include <KJob> |
16 | #include <QProcess> |
17 | |
18 | class QNetworkReply; |
19 | |
20 | namespace Phabricator |
21 | { |
22 | class DifferentialRevision : public KJob |
23 | { |
24 | Q_OBJECT |
25 | public: |
26 | DifferentialRevision(const QString &id, QObject *parent) |
27 | : KJob(parent) |
28 | , m_id(id) |
29 | , m_commit(QString()) |
30 | { |
31 | setPercent(0); |
32 | } |
33 | QString requestId() const |
34 | { |
35 | return m_id; |
36 | } |
37 | void setRequestId(const QString &id) |
38 | { |
39 | m_id = id; |
40 | } |
41 | QString commitRef() const |
42 | { |
43 | return m_commit; |
44 | } |
45 | void setCommitRef(const QString &commit) |
46 | { |
47 | m_commit = commit; |
48 | } |
49 | void start() override; |
50 | QString errorString() const override |
51 | { |
52 | return m_errorString; |
53 | } |
54 | void setErrorString(const QString &msg); |
55 | QString scrubbedResult(); |
56 | QStringList scrubbedResultList(); |
57 | |
58 | private Q_SLOTS: |
59 | virtual void done(int exitCode, QProcess::ExitStatus exitStatus) = 0; |
60 | |
61 | protected: |
62 | virtual bool buildArcCommand(const QString &workDir, const QString &patchFile = QString(), bool doBrowse = false); |
63 | QProcess m_arcCmd; |
64 | |
65 | private: |
66 | QString m_id; |
67 | QString m_commit; |
68 | QString m_errorString; |
69 | QString m_arcInput; |
70 | }; |
71 | |
72 | class NewDiffRev : public DifferentialRevision |
73 | { |
74 | Q_OBJECT |
75 | public: |
76 | NewDiffRev(const QUrl &patch, const QString &project, bool doBrowse = false, QObject *parent = nullptr); |
77 | QString diffURI() const |
78 | { |
79 | return m_diffURI; |
80 | } |
81 | |
82 | private Q_SLOTS: |
83 | void done(int exitCode, QProcess::ExitStatus exitStatus) override; |
84 | |
85 | private: |
86 | QUrl m_patch; |
87 | QString m_project; |
88 | QString m_diffURI; |
89 | }; |
90 | |
91 | class UpdateDiffRev : public DifferentialRevision |
92 | { |
93 | Q_OBJECT |
94 | public: |
95 | UpdateDiffRev(const QUrl &patch, |
96 | const QString &basedir, |
97 | const QString &id, |
98 | const QString & = QString(), |
99 | bool doBrowse = false, |
100 | QObject *parent = nullptr); |
101 | QString diffURI() const |
102 | { |
103 | return m_diffURI; |
104 | } |
105 | |
106 | private Q_SLOTS: |
107 | void done(int exitCode, QProcess::ExitStatus exitStatus) override; |
108 | |
109 | private: |
110 | QUrl m_patch; |
111 | QString m_basedir; |
112 | QString m_diffURI; |
113 | }; |
114 | |
115 | class DiffRevList : public DifferentialRevision |
116 | { |
117 | Q_OBJECT |
118 | public: |
119 | enum Status { |
120 | Accepted, |
121 | NeedsReview, |
122 | NeedsRevision, |
123 | }; |
124 | Q_ENUM(Status) |
125 | |
126 | DiffRevList(const QString &projectDir, QObject *parent = nullptr); |
127 | // return the open diff. revisions as a list of <diffID,diffDescription> pairs |
128 | QList<QPair<QString, QString>> reviews() const |
129 | { |
130 | return m_reviews; |
131 | } |
132 | // return the open diff. revisions as a map of diffDescription->diffID entries |
133 | QHash<QString, QString> reviewMap() const |
134 | { |
135 | return m_revMap; |
136 | } |
137 | // return the open diff. revision statuses as a map of diffDescription->Status entries |
138 | QHash<QString, Status> statusMap() const |
139 | { |
140 | return m_statusMap; |
141 | } |
142 | |
143 | private Q_SLOTS: |
144 | void done(int exitCode, QProcess::ExitStatus exitStatus) override; |
145 | |
146 | protected: |
147 | bool buildArcCommand(const QString &workDir, const QString &unused = QString(), bool ignored = false) override; |
148 | |
149 | private: |
150 | QList<QPair<QString, QString>> m_reviews; |
151 | QHash<QString, QString> m_revMap; |
152 | QHash<QString, Status> m_statusMap; |
153 | QString m_projectDir; |
154 | }; |
155 | } |
156 | |
157 | #endif |
158 | |