1#include "RepoFetcher.h"
2
3#include <QNetworkAccessManager>
4#include <QNetworkReply>
5#include <QJsonDocument>
6#include <QJsonObject>
7#include <QJsonArray>
8
9#include <QLogger.h>
10
11using namespace QLogger;
12
13namespace Jenkins
14{
15
16RepoFetcher::RepoFetcher(const IFetcher::Config &config, const QString &url, QObject *parent)
17 : IFetcher(config, parent)
18 , mUrl(url)
19{
20}
21
22RepoFetcher::~RepoFetcher()
23{
24 QLog_Debug("Jenkins", "Destroying repo fetcher object.");
25}
26
27void RepoFetcher::triggerFetch()
28{
29 get(mUrl);
30}
31
32void RepoFetcher::processData(const QJsonDocument &json)
33{
34 const auto jsonObject = json.object();
35
36 if (!jsonObject.contains(QStringLiteral("views")))
37 {
38 QLog_Info("Jenkins", "Views are absent.");
39 return;
40 }
41
42 const auto views = jsonObject[QStringLiteral("views")].toArray();
43 QVector<JenkinsViewInfo> viewsInfo;
44 viewsInfo.reserve(views.count());
45
46 for (const auto &view : views)
47 {
48 auto appendView = false;
49 const auto viewObject = view.toObject();
50 const auto jobs = viewObject[QStringLiteral("jobs")].toArray();
51
52 for (const auto &job : jobs)
53 {
54 QJsonObject jobObject = job.toObject();
55 QString url;
56
57 if (jobObject.contains(QStringLiteral("url")))
58 url = jobObject[QStringLiteral("url")].toString();
59
60 if (jobObject[QStringLiteral("_class")].toString().contains("WorkflowMultiBranchProject"))
61 {
62 JenkinsViewInfo info;
63 info.url = url;
64
65 if (jobObject.contains(QStringLiteral("name")))
66 info.name = jobObject[QStringLiteral("name")].toString();
67
68 viewsInfo.append(info);
69 }
70 else if (jobObject[QStringLiteral("_class")].toString().contains("WorkflowJob"))
71 appendView = true;
72 }
73
74 if (appendView)
75 {
76#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
77 const auto flag = Qt::SkipEmptyParts;
78#else
79 const auto flag = QString::SkipEmptyParts;
80#endif
81
82 JenkinsViewInfo info;
83 info.url = viewObject[QStringLiteral("url")].toString();
84 info.name = info.url.split("/", flag).constLast();
85 viewsInfo.prepend(info);
86 }
87 }
88
89 emit signalViewsReceived(viewsInfo);
90}
91
92}
93