1/*
2 This file is part of KDE.
3
4 SPDX-FileCopyrightText: 2008 Cornelius Schumacher <schumacher@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7*/
8
9#include "postjob.h"
10
11#include <QDebug>
12#include <QXmlStreamReader>
13
14#include <QNetworkAccessManager>
15
16#include "platformdependent.h"
17
18using namespace Attica;
19
20PostJob::PostJob(PlatformDependent *internals, const QNetworkRequest &request, QIODevice *iodevice)
21 : BaseJob(internals)
22 , m_ioDevice(iodevice)
23 , m_request(request)
24{
25}
26
27Attica::PostJob::PostJob(PlatformDependent *internals, const QNetworkRequest &request, const QByteArray &byteArray)
28 : BaseJob(internals)
29 , m_ioDevice(nullptr)
30 , m_byteArray(byteArray)
31 , m_request(request)
32{
33}
34
35PostJob::PostJob(PlatformDependent *internals, const QNetworkRequest &request, const StringMap &parameters)
36 : BaseJob(internals)
37 , m_ioDevice(nullptr)
38 , m_request(request)
39{
40 // Create post data
41 int j = 0;
42 for (StringMap::const_iterator i = parameters.begin(); i != parameters.end(); ++i) {
43 if (j++ > 0) {
44 m_byteArray.append(c: '&');
45 }
46 m_byteArray.append(a: QUrl::toPercentEncoding(i.key()));
47 m_byteArray.append(c: '=');
48 m_byteArray.append(a: QUrl::toPercentEncoding(i.value()));
49 }
50}
51
52QNetworkReply *PostJob::executeRequest()
53{
54 if (m_ioDevice) {
55 return internals()->post(request: m_request, data: m_ioDevice);
56 } else {
57 return internals()->post(request: m_request, data: m_byteArray);
58 }
59}
60
61void PostJob::parse(const QString &xmlString)
62{
63 // qCDebug(ATTICA) << "PostJob::parse" << xmlString;
64 QXmlStreamReader xml(xmlString);
65 Metadata data;
66 while (!xml.atEnd()) {
67 xml.readNext();
68
69 if (xml.isStartElement()) {
70 if (xml.name() == QLatin1String("meta")) {
71 while (!xml.atEnd()) {
72 xml.readNext();
73 if (xml.isEndElement() && xml.name() == QLatin1String("meta")) {
74 break;
75 } else if (xml.isStartElement()) {
76 if (xml.name() == QLatin1String("status")) {
77 data.setStatusString(xml.readElementText());
78 } else if (xml.name() == QLatin1String("statuscode")) {
79 data.setStatusCode(xml.readElementText().toInt());
80 } else if (xml.name() == QLatin1String("message")) {
81 data.setMessage(xml.readElementText());
82 } else if (xml.name() == QLatin1String("totalitems")) {
83 data.setTotalItems(xml.readElementText().toInt());
84 } else if (xml.name() == QLatin1String("itemsperpage")) {
85 data.setItemsPerPage(xml.readElementText().toInt());
86 }
87 }
88 }
89 } else if (xml.name() == QLatin1String("data")) {
90 while (!xml.atEnd()) {
91 xml.readNext();
92 if (xml.isEndElement() && xml.name() == QLatin1String("data")) {
93 break;
94 } else if (xml.isStartElement()) {
95 if (xml.name() == QLatin1String("projectid")) {
96 data.setResultingId(xml.readElementText());
97 }
98 if (xml.name() == QLatin1String("buildjobid")) {
99 data.setResultingId(xml.readElementText());
100 }
101 }
102 }
103 }
104 }
105 }
106 setMetadata(data);
107}
108
109#include "moc_postjob.cpp"
110

source code of attica/src/postjob.cpp