Skip to content
This repository has been archived by the owner on Sep 1, 2021. It is now read-only.

[click] Update to use openstore v3 api #151

Merged
merged 2 commits into from
Apr 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions plugins/system-update/PageComponent.qml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ ItemPage {
if (!root.online) {
return i18n.tr("Connect to the Internet to check for updates.");
} else if (s === UpdateManager.StatusIdle && updatesCount === 0) {
return i18n.tr("System software is up to date");
return i18n.tr("Software is up to date");
} else if (s === UpdateManager.StatusServerError ||
s === UpdateManager.StatusNetworkError) {
return i18n.tr("The update server is not responding. Try again later.");
Expand All @@ -172,12 +172,6 @@ ItemPage {
}
}

ListItem.SingleValue {
text: i18n.tr("Update apps in the OpenStore")
progression: true
onClicked: Qt.openUrlExternally("openstore://updates")
}

SettingsItemTitle {
id: updatesAvailableHeader
text: i18n.tr("Updates Available")
Expand Down
68 changes: 37 additions & 31 deletions plugins/system-update/click/apiclient_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ ApiClientImpl::ApiClientImpl(Network::Manager *nam, QObject *parent)
this, SLOT(requestFinished(QNetworkReply *)));
connect(m_nam, SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError>&)),
this, SLOT(requestSslFailed(QNetworkReply *, const QList<QSslError>&)));
connect(this, &ApiClient::serverError, this, [this]() {
m_hasErrors = true;
m_requests = 0;
m_apps = QJsonArray();
});
}

ApiClientImpl::~ApiClientImpl()
Expand Down Expand Up @@ -78,33 +83,27 @@ void ApiClientImpl::requestMetadata(const QUrl &url,

void ApiClientImpl::requestUpdatesMetadata(const QStringList &packages)
{
QUrl url(Helpers::clickMetadataUrl());
QUrlQuery query(url);

QJsonObject body;

QStringList frameworks = Helpers::getAvailableFrameworks();
body.insert("frameworks", QJsonArray::fromStringList(frameworks));

body.insert("architecture",
QString::fromStdString(Helpers::getArchitecture()));

body.insert("apps", QJsonArray::fromStringList(packages));

body.insert("channel", Helpers::getSystemCodename());

QJsonDocument doc(body);
QByteArray content = doc.toJson();

QUrl u(url);
u.setQuery(query);
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setUrl(u);
request.setOriginatingObject(this);
request.setAttribute(QNetworkRequest::User, "metadata-request");

initializeReply(m_nam->post(request, content));
if (m_requests != 0) {
qCritical() << Q_FUNC_INFO << "Has still some requests active:" << m_requests;
m_requests = 0;
}
foreach (const auto &package, packages) {
QString rawUrl(Helpers::clickMetadataUrl());
rawUrl.append(package);
QUrl url(rawUrl);
QUrlQuery query(url);

QUrl u(url);
u.setQuery(query);
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setUrl(u);
request.setOriginatingObject(this);
request.setAttribute(QNetworkRequest::User, "metadata-request");

m_requests++;
initializeReply(m_nam->get(request));
}
}

void ApiClientImpl::initializeReply(QNetworkReply *reply)
Expand Down Expand Up @@ -208,12 +207,19 @@ void ApiClientImpl::handleRevisionReply(QNetworkReply *reply)
void ApiClientImpl::handleMetadataReply(QNetworkReply *reply)
{
QScopedPointer<QJsonParseError> jsonError(new QJsonParseError);
m_requests--;

auto document = QJsonDocument::fromJson(reply->readAll(),
jsonError.data());
QJsonValue packages = document.object()["data"].toObject()["packages"];

if (packages.isArray()) {
Q_EMIT metadataRequestSucceeded(packages.toArray());
QJsonValue package = document.object()["data"];

if (package.isObject()) {
m_apps.append(package);
if (m_requests <= 0 && !m_hasErrors) {
Q_EMIT metadataRequestSucceeded(m_apps);
m_requests = 0;
m_apps = QJsonArray();
}
} else {
qCritical() << Q_FUNC_INFO << "Got invalid click metadata.";
Q_EMIT serverError();
Expand Down
3 changes: 3 additions & 0 deletions plugins/system-update/click/apiclient_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ protected slots:

Network::Manager *m_nam;
bool m_ignore_version = false;
int m_requests = 0;
QJsonArray m_apps;
bool m_hasErrors = false;
};
} // Click
} // UpdatePlugin
Expand Down
4 changes: 2 additions & 2 deletions plugins/system-update/helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ QString Helpers::getSystemCodename()
QString Helpers::clickMetadataUrl()
{
QString url = QStringLiteral(
"https://open-store.io/api/v2/apps"
"https://open-store.io/api/v3/apps/"
);
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
return environment.value("URL_APPS", url);
Expand All @@ -108,7 +108,7 @@ QString Helpers::clickMetadataUrl()
QString Helpers::clickRevisionUrl()
{
QString url = QStringLiteral(
"https://open-store.io/api/v2/apps/revision"
"https://open-store.io/api/v3/revisions"
);
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
return environment.value("URL_REVISION", url);
Expand Down