fix: create NetworkManager statics in init() (#5254)
This commit is contained in:
@@ -188,6 +188,7 @@
|
|||||||
- Dev: Cleaned up and optimized resources. (#5222)
|
- Dev: Cleaned up and optimized resources. (#5222)
|
||||||
- Dev: Refactor `StreamerMode`. (#5216, #5236)
|
- Dev: Refactor `StreamerMode`. (#5216, #5236)
|
||||||
- Dev: Cleaned up unused code in `MessageElement` and `MessageLayoutElement`. (#5225)
|
- Dev: Cleaned up unused code in `MessageElement` and `MessageLayoutElement`. (#5225)
|
||||||
|
- Dev: `NetworkManager`'s statics are now created in its `init` method. (#5254)
|
||||||
|
|
||||||
## 2.4.6
|
## 2.4.6
|
||||||
|
|
||||||
|
|||||||
@@ -4,19 +4,36 @@
|
|||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
|
|
||||||
QThread NetworkManager::workerThread;
|
QThread *NetworkManager::workerThread = nullptr;
|
||||||
QNetworkAccessManager NetworkManager::accessManager;
|
QNetworkAccessManager *NetworkManager::accessManager = nullptr;
|
||||||
|
|
||||||
void NetworkManager::init()
|
void NetworkManager::init()
|
||||||
{
|
{
|
||||||
NetworkManager::accessManager.moveToThread(&NetworkManager::workerThread);
|
assert(!NetworkManager::workerThread);
|
||||||
NetworkManager::workerThread.start();
|
assert(!NetworkManager::accessManager);
|
||||||
|
|
||||||
|
NetworkManager::workerThread = new QThread;
|
||||||
|
NetworkManager::workerThread->start();
|
||||||
|
|
||||||
|
NetworkManager::accessManager = new QNetworkAccessManager;
|
||||||
|
NetworkManager::accessManager->moveToThread(NetworkManager::workerThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::deinit()
|
void NetworkManager::deinit()
|
||||||
{
|
{
|
||||||
NetworkManager::workerThread.quit();
|
assert(NetworkManager::workerThread);
|
||||||
NetworkManager::workerThread.wait();
|
assert(NetworkManager::accessManager);
|
||||||
|
|
||||||
|
if (NetworkManager::workerThread)
|
||||||
|
{
|
||||||
|
NetworkManager::workerThread->quit();
|
||||||
|
NetworkManager::workerThread->wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
delete NetworkManager::accessManager;
|
||||||
|
NetworkManager::accessManager = nullptr;
|
||||||
|
delete NetworkManager::workerThread;
|
||||||
|
NetworkManager::workerThread = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ class NetworkManager : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static QThread workerThread;
|
static QThread *workerThread;
|
||||||
static QNetworkAccessManager accessManager;
|
static QNetworkAccessManager *accessManager;
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static void deinit();
|
static void deinit();
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ void loadUncached(std::shared_ptr<NetworkData> &&data)
|
|||||||
NetworkRequester requester;
|
NetworkRequester requester;
|
||||||
auto *worker = new NetworkTask(std::move(data));
|
auto *worker = new NetworkTask(std::move(data));
|
||||||
|
|
||||||
worker->moveToThread(&NetworkManager::workerThread);
|
worker->moveToThread(NetworkManager::workerThread);
|
||||||
|
|
||||||
QObject::connect(&requester, &NetworkRequester::requestUrl, worker,
|
QObject::connect(&requester, &NetworkRequester::requestUrl, worker,
|
||||||
&NetworkTask::run);
|
&NetworkTask::run);
|
||||||
|
|||||||
@@ -54,41 +54,41 @@ QNetworkReply *NetworkTask::createReply()
|
|||||||
{
|
{
|
||||||
const auto &data = this->data_;
|
const auto &data = this->data_;
|
||||||
const auto &request = this->data_->request;
|
const auto &request = this->data_->request;
|
||||||
auto &accessManager = NetworkManager::accessManager;
|
auto *accessManager = NetworkManager::accessManager;
|
||||||
switch (this->data_->requestType)
|
switch (this->data_->requestType)
|
||||||
{
|
{
|
||||||
case NetworkRequestType::Get:
|
case NetworkRequestType::Get:
|
||||||
return accessManager.get(request);
|
return accessManager->get(request);
|
||||||
|
|
||||||
case NetworkRequestType::Put:
|
case NetworkRequestType::Put:
|
||||||
return accessManager.put(request, data->payload);
|
return accessManager->put(request, data->payload);
|
||||||
|
|
||||||
case NetworkRequestType::Delete:
|
case NetworkRequestType::Delete:
|
||||||
return accessManager.deleteResource(data->request);
|
return accessManager->deleteResource(data->request);
|
||||||
|
|
||||||
case NetworkRequestType::Post:
|
case NetworkRequestType::Post:
|
||||||
if (data->multiPartPayload)
|
if (data->multiPartPayload)
|
||||||
{
|
{
|
||||||
assert(data->payload.isNull());
|
assert(data->payload.isNull());
|
||||||
|
|
||||||
return accessManager.post(request,
|
return accessManager->post(request,
|
||||||
data->multiPartPayload.get());
|
data->multiPartPayload.get());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return accessManager.post(request, data->payload);
|
return accessManager->post(request, data->payload);
|
||||||
}
|
}
|
||||||
case NetworkRequestType::Patch:
|
case NetworkRequestType::Patch:
|
||||||
if (data->multiPartPayload)
|
if (data->multiPartPayload)
|
||||||
{
|
{
|
||||||
assert(data->payload.isNull());
|
assert(data->payload.isNull());
|
||||||
|
|
||||||
return accessManager.sendCustomRequest(
|
return accessManager->sendCustomRequest(
|
||||||
request, "PATCH", data->multiPartPayload.get());
|
request, "PATCH", data->multiPartPayload.get());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return NetworkManager::accessManager.sendCustomRequest(
|
return NetworkManager::accessManager->sendCustomRequest(
|
||||||
request, "PATCH", data->payload);
|
request, "PATCH", data->payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ TEST(NetworkRequest, Success)
|
|||||||
{
|
{
|
||||||
const std::vector<int> codes{200, 201, 202, 203, 204, 205, 206};
|
const std::vector<int> codes{200, 201, 202, 203, 204, 205, 206};
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
for (const auto code : codes)
|
for (const auto code : codes)
|
||||||
{
|
{
|
||||||
@@ -96,14 +96,14 @@ TEST(NetworkRequest, Success)
|
|||||||
waiter.waitForRequest();
|
waiter.waitForRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(NetworkRequest, FinallyCallbackOnSuccess)
|
TEST(NetworkRequest, FinallyCallbackOnSuccess)
|
||||||
{
|
{
|
||||||
const std::vector<int> codes{200, 201, 202, 203, 204, 205, 206};
|
const std::vector<int> codes{200, 201, 202, 203, 204, 205, 206};
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
for (const auto code : codes)
|
for (const auto code : codes)
|
||||||
{
|
{
|
||||||
@@ -132,7 +132,7 @@ TEST(NetworkRequest, Error)
|
|||||||
411, 412, 413, 414, 418, 500, 501, 502, 503, 504,
|
411, 412, 413, 414, 418, 500, 501, 502, 503, 504,
|
||||||
};
|
};
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
for (const auto code : codes)
|
for (const auto code : codes)
|
||||||
{
|
{
|
||||||
@@ -155,7 +155,7 @@ TEST(NetworkRequest, Error)
|
|||||||
waiter.waitForRequest();
|
waiter.waitForRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(NetworkRequest, FinallyCallbackOnError)
|
TEST(NetworkRequest, FinallyCallbackOnError)
|
||||||
@@ -165,7 +165,7 @@ TEST(NetworkRequest, FinallyCallbackOnError)
|
|||||||
411, 412, 413, 414, 418, 500, 501, 502, 503, 504,
|
411, 412, 413, 414, 418, 500, 501, 502, 503, 504,
|
||||||
};
|
};
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
for (const auto code : codes)
|
for (const auto code : codes)
|
||||||
{
|
{
|
||||||
@@ -189,7 +189,7 @@ TEST(NetworkRequest, FinallyCallbackOnError)
|
|||||||
|
|
||||||
TEST(NetworkRequest, TimeoutTimingOut)
|
TEST(NetworkRequest, TimeoutTimingOut)
|
||||||
{
|
{
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
auto url = getDelayURL(5);
|
auto url = getDelayURL(5);
|
||||||
RequestWaiter waiter;
|
RequestWaiter waiter;
|
||||||
@@ -214,12 +214,12 @@ TEST(NetworkRequest, TimeoutTimingOut)
|
|||||||
|
|
||||||
waiter.waitForRequest();
|
waiter.waitForRequest();
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(NetworkRequest, TimeoutNotTimingOut)
|
TEST(NetworkRequest, TimeoutNotTimingOut)
|
||||||
{
|
{
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
auto url = getDelayURL(1);
|
auto url = getDelayURL(1);
|
||||||
RequestWaiter waiter;
|
RequestWaiter waiter;
|
||||||
@@ -240,12 +240,12 @@ TEST(NetworkRequest, TimeoutNotTimingOut)
|
|||||||
|
|
||||||
waiter.waitForRequest();
|
waiter.waitForRequest();
|
||||||
|
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(NetworkRequest, FinallyCallbackOnTimeout)
|
TEST(NetworkRequest, FinallyCallbackOnTimeout)
|
||||||
{
|
{
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
|
|
||||||
auto url = getDelayURL(5);
|
auto url = getDelayURL(5);
|
||||||
|
|
||||||
@@ -276,5 +276,5 @@ TEST(NetworkRequest, FinallyCallbackOnTimeout)
|
|||||||
EXPECT_TRUE(finallyCalled);
|
EXPECT_TRUE(finallyCalled);
|
||||||
EXPECT_TRUE(onErrorCalled);
|
EXPECT_TRUE(onErrorCalled);
|
||||||
EXPECT_FALSE(onSuccessCalled);
|
EXPECT_FALSE(onSuccessCalled);
|
||||||
EXPECT_TRUE(NetworkManager::workerThread.isRunning());
|
EXPECT_TRUE(NetworkManager::workerThread->isRunning());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user