2023-01-22 11:13:25 +00:00
|
|
|
// Copyright (C) 2023 The Qt Company Ltd.
|
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
|
|
|
|
#include "abstractresource.h"
|
2024-02-05 10:17:09 +00:00
|
|
|
#include "restservice.h"
|
2023-01-22 11:13:25 +00:00
|
|
|
|
2024-02-05 10:17:09 +00:00
|
|
|
#if QT_CONFIG(ssl)
|
|
|
|
#include <QtNetwork/qsslsocket.h>
|
|
|
|
#endif
|
2025-04-14 08:36:55 +00:00
|
|
|
#include <QtNetwork/qrestaccessmanager.h>
|
2023-01-22 11:13:25 +00:00
|
|
|
|
2025-05-16 06:47:26 +00:00
|
|
|
using namespace Qt::StringLiterals;
|
|
|
|
|
2024-02-05 10:17:09 +00:00
|
|
|
RestService::RestService(QObject *parent) : QObject(parent)
|
2023-01-22 11:13:25 +00:00
|
|
|
{
|
2024-02-05 10:17:09 +00:00
|
|
|
m_qnam.setAutoDeleteReplies(true);
|
|
|
|
m_manager = std::make_shared<QRestAccessManager>(&m_qnam);
|
|
|
|
m_serviceApi = std::make_shared<QNetworkRequestFactory>();
|
2023-01-22 11:13:25 +00:00
|
|
|
}
|
|
|
|
|
2024-02-05 10:13:35 +00:00
|
|
|
void RestService::setUrl(const QUrl &url)
|
2023-01-22 11:13:25 +00:00
|
|
|
{
|
2024-02-05 10:17:09 +00:00
|
|
|
if (m_serviceApi->baseUrl() == url)
|
|
|
|
return;
|
|
|
|
m_serviceApi->setBaseUrl(url);
|
2025-05-16 06:47:26 +00:00
|
|
|
QHttpHeaders authenticationHeaders;
|
|
|
|
// reqres.in requires an API-key, see https://reqres.in/signup
|
|
|
|
if (url.host().startsWith("reqres"_L1))
|
|
|
|
authenticationHeaders.append("x-api-key", "reqres-free-v1");
|
|
|
|
m_serviceApi->setCommonHeaders(authenticationHeaders);
|
2023-01-22 11:13:25 +00:00
|
|
|
emit urlChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
QUrl RestService::url() const
|
|
|
|
{
|
2024-02-05 10:17:09 +00:00
|
|
|
return m_serviceApi->baseUrl();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool RestService::sslSupported()
|
|
|
|
{
|
|
|
|
#if QT_CONFIG(ssl)
|
|
|
|
return QSslSocket::supportsSsl();
|
|
|
|
#else
|
|
|
|
return false;
|
|
|
|
#endif
|
2023-01-22 11:13:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QQmlListProperty<AbstractResource> RestService::resources()
|
|
|
|
{
|
|
|
|
return {this, &m_resources};
|
|
|
|
}
|
|
|
|
|
|
|
|
void RestService::classBegin()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void RestService::componentComplete()
|
|
|
|
{
|
2024-02-05 10:17:09 +00:00
|
|
|
for (const auto resource : std::as_const(m_resources)) {
|
|
|
|
resource->setAccessManager(m_manager);
|
|
|
|
resource->setServiceApi(m_serviceApi);
|
|
|
|
}
|
2023-01-22 11:13:25 +00:00
|
|
|
}
|