• R/O
  • SSH

rzd_tickets: Commit

Cherry-picking of railway tickets from RZD based on price


Commit MetaInfo

Revisione5b7300545e7a01ba321c8a972c34912c75e5d84 (tree)
Time2024-03-03 15:08:17
AuthorSergey Gusarov <laborer2008@gmai...>
CommiterSergey Gusarov

Log Message

Loading proxy list to the object

Change Summary

Incremental Difference

diff -r 5be610ef8a9b -r e5b7300545e7 include/rzd.hpp
--- a/include/rzd.hpp Sun Mar 03 07:48:11 2024 +0300
+++ b/include/rzd.hpp Sun Mar 03 09:08:17 2024 +0300
@@ -11,7 +11,8 @@
1111 #include <ctools/predef/external_headers.h>
1212
1313 CT_BEGIN_EXTERNAL_HEADERS
14-#include <QNetworkAccessManager>
14+# include <QNetworkAccessManager>
15+# include <QNetworkProxy>
1516 CT_END_EXTERNAL_HEADERS
1617
1718 #include <cpptools/string.hpp>
@@ -42,10 +43,12 @@
4243
4344 private:
4445 static const std::string kPath;
46+ QList<QNetworkProxy> proxyList;
4547
4648 QNetworkAccessManager networkAccessManager;
4749
4850 void reset();
51+ void loadProxyList();
4952
5053 private slots:
5154 void slotFinished(QNetworkReply* networkReply);
diff -r 5be610ef8a9b -r e5b7300545e7 resources_rzdt.qrc
--- a/resources_rzdt.qrc Sun Mar 03 07:48:11 2024 +0300
+++ b/resources_rzdt.qrc Sun Mar 03 09:08:17 2024 +0300
@@ -1,5 +1,6 @@
11 <RCC>
22 <qresource prefix="/">
33 <file>resources/qtbase_ru.qm</file>
4+ <file>proxy_list/http.txt</file>
45 </qresource>
56 </RCC>
diff -r 5be610ef8a9b -r e5b7300545e7 src/rzd.cpp
--- a/src/rzd.cpp Sun Mar 03 07:48:11 2024 +0300
+++ b/src/rzd.cpp Sun Mar 03 09:08:17 2024 +0300
@@ -9,9 +9,15 @@
99 #include "rzd.hpp"
1010
1111 CT_BEGIN_EXTERNAL_HEADERS
12+# include <random>
13+
14+# include <QFile>
1215 CT_END_EXTERNAL_HEADERS
1316
17+#include <ctools/std/math.h>
18+
1419 #include <qttools/safe_connect.hpp>
20+#include <qttools/types.hpp>
1521
1622
1723 /* *INDENT-OFF* */
@@ -22,8 +28,11 @@
2228
2329 Rzd::Rzd()
2430 :
31+ proxyList(),
2532 networkAccessManager()
2633 {
34+ loadProxyList();
35+
2736 qttools::safeConnect(&networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotFinished(QNetworkReply*)));
2837 qttools::safeConnect(&networkAccessManager, SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)),
2938 this, SLOT(slotNetworkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)));
@@ -36,6 +45,55 @@
3645 networkAccessManager.clearAccessCache();
3746 }
3847
48+void Rzd::loadProxyList()
49+{
50+ const QString kFolder = ":/proxy_list/";
51+ const QString kFile = kFolder + "http.txt";
52+
53+ QFile file(kFile);
54+ QByteArray ba;
55+ QByteArrayList baList;
56+
57+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
58+ CPT_THROW(cpptools::exceptions::IllegalStateException);
59+
60+ ba = file.readAll();
61+ baList = ba.split('\n');
62+
63+ file.close();
64+
65+ const size_t kNumberOfProxies = 100;
66+
67+ for (size_t i = 0; i < kNumberOfProxies; i++)
68+ {
69+ const int kRandomIndex = ctools::iround16((static_cast<double>(std::rand()) / RAND_MAX) * (baList.length() - 1));
70+ const QString kS = baList[kRandomIndex];
71+
72+ const QStringList kParts = kS.split(':');
73+
74+ CPT_THROW_IF(kParts.length() != 2, cpptools::exceptions::UnexpectedValueException);
75+
76+ const QString kIp = kParts[0];
77+ const QString kPort = kParts[1];
78+
79+ bool ok;
80+ uint port = kPort.toUInt(&ok);
81+
82+ CPT_THROW_IF(!ok, cpptools::exceptions::StringConvertionException);
83+
84+ quint16 port16;
85+
86+ if (port <= UINT16_MAX)
87+ port16 = static_cast<quint16>(port);
88+ else
89+ CPT_THROW(cpptools::exceptions::UnexpectedValueException);
90+
91+ QNetworkProxy networkProxy(QNetworkProxy::HttpProxy, kIp, port16);
92+
93+ proxyList.append(networkProxy);
94+ }
95+}
96+
3997 std::string Rzd::getQuery(const std::string path, const std::list<std::string> params, const QNetworkAccessManager::Operation operation)
4098 {
4199
Show on old repository browser