Skip to content

Commit f9d2453

Browse files
committed
New function http_request()
http_request(url, network_status, user_agent); Created to avoid repetitive code snippets.
1 parent e412d66 commit f9d2453

1 file changed

Lines changed: 54 additions & 117 deletions

File tree

main.cpp

Lines changed: 54 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,39 @@ long version_convert(QString version) {
2121
return major * 1000000 + minor * 10000 + patch * 100;
2222
}
2323

24+
QByteArray http_request(QUrl url, bool &network_status, QString user_agent = SOFT_NAME + " " + SOFT_VERSION + " " + get_client_id() + " action[get_update_info]") {
25+
26+
// Create a network manager.
27+
QNetworkAccessManager manager;
28+
29+
QNetworkRequest request(url);
30+
request.setRawHeader("User-Agent", user_agent.toUtf8());
31+
auto *reply = manager.get(request);
32+
33+
// Wait for the request to complete
34+
QEventLoop event_loop;
35+
QObject::connect(reply, &QNetworkReply::finished, &event_loop, &QEventLoop::quit);
36+
event_loop.exec();
37+
38+
// Get the response data.
39+
QByteArray data = reply->readAll();
40+
41+
// Checking connection errors
42+
if (reply->error() == QNetworkReply::NoError) {
43+
network_status = 0;
44+
} else if (reply->error() == QNetworkReply::TimeoutError) { // Handle the timeout error
45+
network_status = 1;
46+
qInfo() << "Network request timed out";
47+
} else { // Handle other errors
48+
network_status = 1;
49+
qInfo() << "Network request error: " << reply->errorString();
50+
}
51+
52+
reply->deleteLater();
53+
54+
return data;
55+
}
56+
2457
struct UpdateInfo {
2558
QString status;
2659
QString endpoint;
@@ -38,18 +71,10 @@ UpdateInfo getUpdateInfo()
3871

3972
try {
4073

41-
QNetworkAccessManager *manager = new QNetworkAccessManager();
42-
QUrl url("https://a8de92e8b7b48f080daaf1b0900c0632.block17.icu/api/v1/getUpdate");
43-
QNetworkRequest request(url);
44-
QString user_agent = SOFT_NAME + " " + SOFT_VERSION + " " + get_client_id() + " action[get_update_info]";
45-
request.setRawHeader("User-Agent", user_agent.toUtf8());
74+
bool network_status = 0;
4675

47-
QNetworkReply *reply = manager->get(request);
48-
QEventLoop loop;
49-
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
50-
loop.exec();
76+
QByteArray data = http_request(QUrl("https://a8de92e8b7b48f080daaf1b0900c0632.block17.icu/api/v1/getUpdate"), network_status);
5177

52-
QByteArray data = reply->readAll();
5378
QJsonDocument jsonDoc = QJsonDocument::fromJson(data);
5479
QJsonObject jsonObj = jsonDoc.object();
5580

@@ -67,8 +92,6 @@ UpdateInfo getUpdateInfo()
6792
info.user_ip = jsonObj.value("user-ip").toString();
6893
}
6994

70-
reply->deleteLater();
71-
7295
} catch (...) {
7396
}
7497

@@ -77,19 +100,12 @@ UpdateInfo getUpdateInfo()
77100

78101
QString sha256_by_link(QString s_url) {
79102

80-
QNetworkAccessManager manager;
81-
QUrl url(s_url);
82-
QNetworkRequest request(url);
103+
bool network_status = 0;
104+
83105
QString user_agent = SOFT_NAME + " " + SOFT_VERSION + " " + get_client_id() + " action[download_sha256]";
84-
request.setRawHeader("User-Agent", user_agent.toUtf8());
85-
QNetworkReply *reply = manager.get(request);
86106

87-
// Wait for the request to complete
88-
QEventLoop eventLoop;
89-
QObject::connect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
90-
eventLoop.exec();
107+
QString t_sha256 = http_request(QUrl(s_url), network_status, user_agent);
91108

92-
QString t_sha256 = reply->readAll();
93109
int length = t_sha256.indexOf(" ");
94110
QString sha256 = t_sha256.left(length);
95111

@@ -273,23 +289,11 @@ QMap<QString, QString> return_null_map (QString text = "net", QString coin = "ne
273289
return inner_map;
274290
}
275291

276-
double poloniex_price_percent_change(QString symbol, double current_price) {
292+
double poloniex_price_percent_change(QString symbol, double current_price, bool &network_status) {
277293

278294
qint64 current_utime = QDateTime::currentSecsSinceEpoch();
279295

280-
// Create a network manager.
281-
QNetworkAccessManager manager;
282-
283-
QNetworkRequest request(QUrl("https://poloniex.com/public?command=returnChartData&currencyPair=" + symbol + "&start=" + QString::number(current_utime-86400) + "&end=" + QString::number(current_utime) + "&period=300"));
284-
auto *reply = manager.get(request);
285-
286-
// Wait for the request to complete
287-
QEventLoop event_loop;
288-
QObject::connect(reply, &QNetworkReply::finished, &event_loop, &QEventLoop::quit);
289-
event_loop.exec();
290-
291-
// Get the response data.
292-
QByteArray data = reply->readAll();
296+
QByteArray data = http_request(QUrl("https://poloniex.com/public?command=returnChartData&currencyPair=" + symbol + "&start=" + QString::number(current_utime-86400) + "&end=" + QString::number(current_utime) + "&period=300"), network_status);
293297

294298
// Parse the JSON data and obtain a QVariant
295299
QJsonDocument json_doc = QJsonDocument::fromJson(data);
@@ -343,22 +347,10 @@ QMap<QString, QMap<QString, QString>> get_exchange_data(QString current_sources,
343347
QJsonDocument json_doc(symbols_json);
344348
QString json_string = json_doc.toJson(QJsonDocument::Compact);
345349

346-
// Create a network manager.
347-
QNetworkAccessManager manager;
348-
349350
QString domain = "api.binance.com";
350351
if (current_sources == "binance_us") domain = "api.binance.us";
351352

352-
QNetworkRequest request(QUrl("https://" + domain + "/api/v3/ticker/24hr?symbols=" + json_string));
353-
auto *reply = manager.get(request);
354-
355-
// Wait for the request to complete
356-
QEventLoop event_loop;
357-
QObject::connect(reply, &QNetworkReply::finished, &event_loop, &QEventLoop::quit);
358-
event_loop.exec();
359-
360-
// Get the response data.
361-
QByteArray data = reply->readAll();
353+
QByteArray data = http_request(QUrl("https://" + domain + "/api/v3/ticker/24hr?symbols=" + json_string), network_status);
362354

363355
// Parse the JSON data
364356
QJsonDocument doc = QJsonDocument::fromJson(data);
@@ -415,29 +407,17 @@ QMap<QString, QMap<QString, QString>> get_exchange_data(QString current_sources,
415407
// Create a network manager.
416408
QNetworkAccessManager manager;
417409

418-
QNetworkRequest request(QUrl("https://poloniex.com/public?command=returnTicker"));
419-
auto *reply = manager.get(request);
420-
421-
// Wait for the request to complete
422-
QEventLoop event_loop;
423-
QObject::connect(reply, &QNetworkReply::finished, &event_loop, &QEventLoop::quit);
424-
event_loop.exec();
425-
426-
// Get the response data.
427-
QByteArray data = reply->readAll();
410+
QByteArray data = http_request(QUrl("https://poloniex.com/public?command=returnTicker"), network_status);
428411

429412
// Parse the JSON data
430413
QJsonDocument doc = QJsonDocument::fromJson(data);
431414
QJsonObject json_obj = doc.object();
432415

433416
// Checking connection errors
434-
network_status = (json_obj.empty()) ? 1 : 0;
435417
if (network_status == 1) {
436-
437418
for (int i = 0; i < symbol_list.size(); ++i) {
438419
output.insert(symbol_list[i], return_null_map());
439420
}
440-
441421
return output;
442422
}
443423

@@ -461,7 +441,7 @@ QMap<QString, QMap<QString, QString>> get_exchange_data(QString current_sources,
461441
inner_map.insert("price_24l", digit_format(jo_symbol_value.value("low24hr")));
462442
// inner_map.insert("price_percent_change", digit_format(jo_symbol_value.value("percentChange"), 2)); // Incorrect output, error in Poloniex API
463443

464-
inner_map.insert("price_percent_change", digit_format(poloniex_price_percent_change(current_symbol, jo_symbol_value.value("last").toString().toDouble()), 2));
444+
inner_map.insert("price_percent_change", digit_format(poloniex_price_percent_change(current_symbol, jo_symbol_value.value("last").toString().toDouble(), network_status), 2));
465445

466446
// Set High/Low 24h price difference
467447
double d_H24 = jo_symbol_value.value("high24hr").toString().toDouble();
@@ -477,41 +457,19 @@ QMap<QString, QMap<QString, QString>> get_exchange_data(QString current_sources,
477457

478458
for (int i = 0; i < symbol_list.size(); ++i) {
479459

480-
// Create a network manager.
481-
QNetworkAccessManager manager;
482-
483-
QNetworkRequest request(QUrl("https://api.exchange.coinbase.com/products/" + symbol_list[i] + "/stats"));
484-
auto *reply = manager.get(request);
485-
486-
// Wait for the request to complete
487-
QEventLoop event_loop;
488-
QObject::connect(reply, &QNetworkReply::finished, &event_loop, &QEventLoop::quit);
489-
event_loop.exec();
460+
QByteArray data = http_request(QUrl("https://api.exchange.coinbase.com/products/" + symbol_list[i] + "/stats"), network_status);
490461

491-
// Get the response data.
492-
QByteArray data = reply->readAll(); // Parse the JSON data and obtain a QVariant
462+
// Parse the JSON data and obtain a QVariant
493463
QJsonDocument json_doc = QJsonDocument::fromJson(data);
494464
QVariantMap json_data = json_doc.toVariant().toMap();
495465

496-
// Checking connection errors
497-
if (reply->error() == QNetworkReply::NoError) {
498-
network_status = 0;
499-
} else if (reply->error() == QNetworkReply::TimeoutError) { // Handle the timeout error
500-
network_status = 1;
501-
qInfo() << "Network request timed out";
502-
} else { // Handle other errors
503-
504-
// It checks if there are any messages. They usually appear when we ask for a pair that doesn't exist.
505-
if (json_data.contains("message")) {
506-
QStringList pairs = symbol_list[i].split("-");
507-
output.insert(symbol_list[i], return_null_map("ERROR", pairs.at(0)));
508-
qInfo() << json_data.value("message").toString() << " : " << symbol_list[i];
509-
nonexistent_pair = true;
510-
continue;
511-
}
512-
513-
network_status = 1;
514-
qInfo() << "Network request error: " << reply->errorString();
466+
// It checks if there are any messages. They usually appear when we ask for a pair that doesn't exist.
467+
if (network_status == 1 && json_data.contains("message")) {
468+
QStringList pairs = symbol_list[i].split("-");
469+
output.insert(symbol_list[i], return_null_map("ERROR", pairs.at(0)));
470+
qInfo() << json_data.value("message").toString() << " : " << symbol_list[i];
471+
nonexistent_pair = true;
472+
continue;
515473
}
516474

517475
if (network_status == 1) {
@@ -556,33 +514,12 @@ QMap<QString, QMap<QString, QString>> get_exchange_data(QString current_sources,
556514
symbols_to_request += tmp;
557515
}
558516

559-
// Create a network manager.
560-
QNetworkAccessManager manager;
561-
562-
QNetworkRequest request(QUrl("https://api.kraken.com/0/public/Ticker?pair=" + symbols_to_request));
563-
auto *reply = manager.get(request);
517+
QByteArray data = http_request(QUrl("https://api.kraken.com/0/public/Ticker?pair=" + symbols_to_request), network_status);
564518

565-
// Wait for the request to complete
566-
QEventLoop event_loop;
567-
QObject::connect(reply, &QNetworkReply::finished, &event_loop, &QEventLoop::quit);
568-
event_loop.exec();
569-
570-
// Get the response data.
571-
QByteArray data = reply->readAll(); // Parse the JSON data and obtain a QVariant
519+
// Parse the JSON data and obtain a QVariant
572520
QJsonDocument json_doc = QJsonDocument::fromJson(data);
573521
QVariantMap json_data = json_doc.toVariant().toMap();
574522

575-
// Checking connection errors
576-
if (reply->error() == QNetworkReply::NoError) {
577-
network_status = 0;
578-
} else if (reply->error() == QNetworkReply::TimeoutError) { // Handle the timeout error
579-
network_status = 1;
580-
qInfo() << "Network request timed out";
581-
} else { // Handle other errors
582-
network_status = 1;
583-
qInfo() << "Network request error: " << reply->errorString();
584-
}
585-
586523
// It checks if there are any messages. They usually appear when we ask for a pair that doesn't exist.
587524
if (data.contains("Unknown")) {
588525
qInfo() << "Unknown asset pairs";

0 commit comments

Comments
 (0)