11#include " currentversionfetcher.h"
2+ #include " system.h"
23
34#include < QDebug>
45#include < QUrl>
56#include < QNetworkRequest>
67#include < QNetworkReply>
78#include < QJsonDocument>
89#include < QJsonObject>
10+ #include < QJsonArray>
911
1012CurrentVersionFetcher::CurrentVersionFetcher (QObject* parent) : QObject(parent), manager_(new QNetworkAccessManager(this ))
1113{
@@ -18,37 +20,83 @@ void CurrentVersionFetcher::fetchCurrentVersion(QString url)
1820 manager_->get (request);
1921}
2022
23+ void ComponentVersionFetcher (QJsonObject jsonObject, QString componentSlug, QString componentSystem, QString *componentVersion, QString *componentUrl)
24+ {
25+ QString componentMirror;
26+ QString componentPath;
27+
28+ QJsonObject componentObject = jsonObject[componentSlug].toObject ();
29+ if (componentObject.isEmpty ()) {
30+ qDebug () << " ComponentVersionFetcher: undefined “" << componentSlug << " ” key" ;
31+ } else {
32+ QJsonValue version = componentObject.value (" version" );
33+ if (version == QJsonValue::Undefined) {
34+ qDebug () << " ComponentVersionFetcher: undefined “version” value for" << componentSlug;
35+ } else {
36+ *componentVersion = version.toString ();
37+ }
38+
39+ QJsonArray mirrorsArray = componentObject[" mirrors" ].toArray ();
40+ if (!mirrorsArray.count ()) {
41+ qDebug () << " ComponentVersionFetcher: undefined “mirrors” key for " << componentSlug;
42+ } else {
43+ componentMirror = mirrorsArray.first ().toString ();
44+ }
45+
46+ QJsonObject parcelsObject = componentObject[" parcels" ].toObject ();
47+ if (parcelsObject.isEmpty ()) {
48+ qDebug () << " ComponentVersionFetcher: undefined “parcels” key for" << componentSlug;
49+ } else {
50+ QJsonObject systemObject = parcelsObject[componentSystem].toObject ();
51+ if (systemObject.isEmpty ()) {
52+ qDebug () << " ComponentVersionFetcher: undefined “" << componentSystem << " ” key for " << componentSlug;
53+ } else {
54+ QJsonValue path = systemObject.value (" path" );
55+ if (path == QJsonValue::Undefined) {
56+ qDebug () << " ComponentVersionFetcher: undefined “path” value for" << componentSlug;
57+ } else {
58+ componentPath = path.toString ();
59+ }
60+ }
61+ }
62+
63+ *componentUrl = componentMirror + " /" + componentPath;
64+ if (*componentUrl == " /" ) {
65+ *componentUrl = " " ;
66+ }
67+
68+ qDebug () << " ComponentVersionFetcher: fetched component =" << componentSlug;
69+ qDebug () << " ComponentVersionFetcher: fetched system =" << componentSystem;
70+ qDebug () << " ComponentVersionFetcher: fetched version =" << *componentVersion;
71+ qDebug () << " ComponentVersionFetcher: fetched mirror =" << componentMirror;
72+ qDebug () << " ComponentVersionFetcher: fetched path =" << componentPath;
73+ qDebug () << " ComponentVersionFetcher: fetched url =" << *componentUrl;
74+ }
75+ }
76+
2177void CurrentVersionFetcher::reply (QNetworkReply* reply)
2278{
23- QString gameVersion;
2479 QString updaterVersion;
80+ QString updaterUrl;
81+ QString gameVersion;
2582
2683 if (reply->error () != QNetworkReply::NoError) {
2784 qDebug () << " CurrentVersionFetcher: network error" ;
28- emit onCurrentVersions (updaterVersion, gameVersion);
85+ emit onCurrentVersions (updaterVersion, updaterUrl, gameVersion);
2986 return ;
3087 }
3188
3289 QJsonParseError error;
3390 QJsonDocument json = QJsonDocument::fromJson (reply->readAll (), &error);
3491 if (error.error != QJsonParseError::NoError) {
3592 qDebug () << " CurrentVersionFetcher: JSON parsing error" ;
36- emit onCurrentVersions (updaterVersion, gameVersion);
93+ emit onCurrentVersions (updaterVersion, updaterUrl, gameVersion);
3794 return ;
3895 }
96+
3997 QJsonObject jsonObject = json.object ();
4098
41- QJsonObject updaterObject = jsonObject[" updater" ].toObject ();
42- if (!updaterObject.isEmpty ()) {
43- QJsonValue version = updaterObject.value (" version" );
44- if (version != QJsonValue::Undefined) {
45- updaterVersion = version.toString ();
46- } else {
47- qDebug () << " CurrentVersionFetcher: undefined “version” updater value" ;
48- }
49- } else {
50- qDebug () << " CurrentVersionFetcher: undefined “updater” key" ;
51- }
99+ ComponentVersionFetcher (jsonObject, " updater" , Sys::updaterSystem (), &updaterVersion, &updaterUrl);
52100
53101 QJsonObject gameObject = jsonObject[" game" ].toObject ();
54102 if (!gameObject.isEmpty ()) {
@@ -62,8 +110,6 @@ void CurrentVersionFetcher::reply(QNetworkReply* reply)
62110 qDebug () << " CurrentVersionFetcher: undefined “game” key" ;
63111 }
64112
65- qDebug () << " CurrentVersionFetcher: fetched versions: updater =" << updaterVersion << " game =" << gameVersion;
66-
67- emit onCurrentVersions (updaterVersion, gameVersion);
113+ emit onCurrentVersions (updaterVersion, updaterUrl, gameVersion);
68114}
69115
0 commit comments