fix: create NetworkManager statics in init() (#5254)

This commit is contained in:
nerix
2024-03-23 11:56:42 +01:00
committed by GitHub
parent e4ea9af004
commit 044d457d20
6 changed files with 48 additions and 30 deletions
+1
View File
@@ -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
+23 -6
View File
@@ -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
+2 -2
View File
@@ -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();
+1 -1
View File
@@ -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);
+9 -9
View File
@@ -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);
} }
} }
+12 -12
View File
@@ -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());
} }