@@ -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+
2457struct 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
78101QString 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¤cyPair=" + 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¤cyPair=" + 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