##// END OF EJS Templates
Update networkcontroller for abort mechanism
perrinel -
r698:076c09acb9f6
parent child
Show More
@@ -21,7 +21,7 struct NetworkController::NetworkControllerPrivate {
21 21 QMutex m_WorkingMutex;
22 22
23 23 QReadWriteLock m_Lock;
24 std::unordered_map<QNetworkReply *, QUuid> m_NetworkReplyToVariableId;
24 std::unordered_map<QNetworkReply *, QUuid> m_NetworkReplyToId;
25 25 std::unique_ptr<QNetworkAccessManager> m_AccessManager{nullptr};
26 26 };
27 27
@@ -40,7 +40,8 void NetworkController::onProcessRequested(std::shared_ptr<QNetworkRequest> requ
40 40
41 41 // Store the couple reply id
42 42 impl->lockWrite();
43 impl->m_NetworkReplyToVariableId[reply] = identifier;
43 impl->m_NetworkReplyToId[reply] = identifier;
44 qCDebug(LOG_NetworkController()) << tr("Store for reply: ") << identifier;
44 45 impl->unlock();
45 46
46 47 auto onReplyFinished = [request, reply, this, identifier, callback]() {
@@ -48,11 +49,13 void NetworkController::onProcessRequested(std::shared_ptr<QNetworkRequest> requ
48 49 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyFinished")
49 50 << QThread::currentThread() << request.get() << reply;
50 51 impl->lockRead();
51 auto it = impl->m_NetworkReplyToVariableId.find(reply);
52 auto it = impl->m_NetworkReplyToId.find(reply);
52 53 impl->unlock();
53 if (it != impl->m_NetworkReplyToVariableId.cend()) {
54 if (it != impl->m_NetworkReplyToId.cend()) {
54 55 impl->lockWrite();
55 impl->m_NetworkReplyToVariableId.erase(reply);
56 qCDebug(LOG_NetworkController()) << tr("Remove for reply: ")
57 << impl->m_NetworkReplyToId[reply];
58 impl->m_NetworkReplyToId.erase(reply);
56 59 impl->unlock();
57 60 // Deletes reply
58 61 callback(reply, identifier);
@@ -65,17 +68,21 void NetworkController::onProcessRequested(std::shared_ptr<QNetworkRequest> requ
65 68
66 69 auto onReplyProgress = [reply, request, this](qint64 bytesRead, qint64 totalBytes) {
67 70
68 double progress = (bytesRead * 100.0) / totalBytes;
69 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyProgress") << progress
70 << QThread::currentThread() << request.get() << reply;
71 impl->lockRead();
72 auto it = impl->m_NetworkReplyToVariableId.find(reply);
73 impl->unlock();
74 if (it != impl->m_NetworkReplyToVariableId.cend()) {
75 emit this->replyDownloadProgress(it->second, request, progress);
71 // NOTE: a totalbytes of 0 can happened when a request has been aborted
72 if (totalBytes > 0) {
73 double progress = (bytesRead * 100.0) / totalBytes;
74 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyProgress") << progress
75 << QThread::currentThread() << request.get() << reply
76 << bytesRead << totalBytes;
77 impl->lockRead();
78 auto it = impl->m_NetworkReplyToId.find(reply);
79 impl->unlock();
80 if (it != impl->m_NetworkReplyToId.cend()) {
note

ok

81 emit this->replyDownloadProgress(it->second, request, progress);
82 }
83 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyProgress END")
84 << QThread::currentThread() << reply;
76 85 }
77 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyProgress END")
78 << QThread::currentThread() << reply;
79 86 };
80 87
81 88
@@ -113,18 +120,20 void NetworkController::onReplyCanceled(QUuid identifier)
113 120 {
114 121 auto findReply = [identifier](const auto &entry) { return identifier == entry.second; };
115 122 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyCanceled")
116 << QThread::currentThread();
123 << QThread::currentThread() << identifier;
117 124
118 125
119 126 impl->lockRead();
120 auto end = impl->m_NetworkReplyToVariableId.cend();
121 auto it = std::find_if(impl->m_NetworkReplyToVariableId.cbegin(), end, findReply);
127 auto end = impl->m_NetworkReplyToId.cend();
128 auto it = std::find_if(impl->m_NetworkReplyToId.cbegin(), end, findReply);
122 129 impl->unlock();
123 130 if (it != end) {
131 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyCanceled ABORT DONE")
132 << QThread::currentThread() << identifier;
124 133 it->first->abort();
125 134 }
126 135 qCDebug(LOG_NetworkController()) << tr("NetworkController onReplyCanceled END")
127 << QThread::currentThread();
136 << QThread::currentThread();
128 137 }
129 138
130 139 void NetworkController::waitForFinish()
General Comments 2
You need to be logged in to leave comments. Login now