@@ -78,13 +78,13 @@ class HttpClient::HttpClientPrivate
7878 QString filePath;
7979 qint64 fileBaseSize;
8080 QPointer<QFile> filePtr;
81- ProgressCallBack progressCallBack = nullptr ;
81+ ProgressCallback progressCallback = {} ;
8282 };
8383
8484 HttpClient *q_ptr;
8585
8686 QSslConfiguration sslConfiguration = QSslConfiguration::defaultConfiguration();
87- QMap<QNetworkReply *, CallBack > tasks;
87+ QMap<QNetworkReply *, JsonCallback > tasks;
8888 QMap<QNetworkReply *, Download *> downloads;
8989 QMap<QNetworkReply *, QFile *> uploads;
9090};
@@ -102,7 +102,7 @@ QNetworkReply *HttpClient::sendRequest(Method method,
102102 const QJsonObject &body,
103103 int timeout,
104104 bool verifyCertificate,
105- CallBack callBack )
105+ JsonCallback callback )
106106{
107107 auto request = d_ptr->networkRequest (verifyCertificate);
108108 request.setUrl (url);
@@ -120,7 +120,7 @@ QNetworkReply *HttpClient::sendRequest(Method method,
120120 connect (reply, &QNetworkReply::finished, this , &HttpClient::onReplyFinish);
121121 connect (reply, &QNetworkReply::errorOccurred, this , &HttpClient::onErrorOccurred);
122122 connect (reply, &QNetworkReply::sslErrors, this , &HttpClient::onSslErrors);
123- d_ptr->tasks .insert (reply, callBack );
123+ d_ptr->tasks .insert (reply, callback );
124124 if (timeout > 0 ) {
125125 auto *timer = new QTimer (reply);
126126 connect (timer, &QTimer::timeout, this , &HttpClient::onNetworkTimeout);
@@ -158,13 +158,14 @@ QNetworkReply *HttpClient::downLoad(const QUrl &url,
158158 const QString &filePath,
159159 int timeout,
160160 bool verifyCertificate,
161- ProgressCallBack progressCallBack ,
162- CallBack callBack )
161+ ProgressCallback progressCallback ,
162+ JsonCallback callback )
163163{
164164 Q_ASSERT (!filePath.isEmpty ());
165165 auto *file = new QFile (filePath + " .temp" , this );
166166 if (!file->open (QIODevice::WriteOnly | QIODevice::Append)) {
167167 qWarning () << QString (" Cannot open the file: %1!" ).arg (filePath) << file->errorString ();
168+ file->deleteLater ();
168169 return nullptr ;
169170 }
170171
@@ -179,8 +180,8 @@ QNetworkReply *HttpClient::downLoad(const QUrl &url,
179180
180181 auto *reply = QNetworkAccessManager::get (request);
181182 d_ptr->downloads
182- .insert (reply, new HttpClientPrivate::Download{filePath, bytes, file, progressCallBack });
183- d_ptr->tasks .insert (reply, callBack );
183+ .insert (reply, new HttpClientPrivate::Download{filePath, bytes, file, progressCallback });
184+ d_ptr->tasks .insert (reply, callback );
184185 connect (reply, &QNetworkReply::errorOccurred, this , &HttpClient::onErrorOccurred);
185186 connect (reply, &QNetworkReply::sslErrors, this , &HttpClient::onSslErrors);
186187 connect (reply, &QNetworkReply::downloadProgress, this , &HttpClient::onDownloadProgress);
@@ -198,7 +199,7 @@ QNetworkReply *HttpClient::upload_put(const QUrl &url,
198199 const QString &filePath,
199200 int timeout,
200201 bool verifyCertificate,
201- CallBack callBack )
202+ JsonCallback callback )
202203{
203204 Q_ASSERT (!filePath.isEmpty ());
204205 auto *file = new QFile (filePath, this );
@@ -214,27 +215,30 @@ QNetworkReply *HttpClient::upload_put(const QUrl &url,
214215 auto *reply = QNetworkAccessManager::put (request, file);
215216 file->setParent (reply);
216217 d_ptr->uploads .insert (reply, file);
217- connectUploadSlots (reply, timeout, callBack );
218+ connectUploadSlots (reply, timeout, callback );
218219 return reply;
219220}
220221
221- QNetworkReply *HttpClient::upload_put (
222- const QUrl &url, const QByteArray &data, int timeout, bool verifyCertificate, CallBack callBack)
222+ QNetworkReply *HttpClient::upload_put (const QUrl &url,
223+ const QByteArray &data,
224+ int timeout,
225+ bool verifyCertificate,
226+ JsonCallback callback)
223227{
224228 qDebug () << QString (" Upload To %1" ).arg (url.toString (QUrl::RemoveUserInfo));
225229
226230 auto request = d_ptr->networkRequest (verifyCertificate);
227231 request.setUrl (url);
228232 auto *reply = QNetworkAccessManager::put (request, data);
229- connectUploadSlots (reply, timeout, callBack );
233+ connectUploadSlots (reply, timeout, callback );
230234 return reply;
231235}
232236
233237QNetworkReply *HttpClient::upload_post (const QUrl &url,
234238 const QString &filePath,
235239 int timeout,
236240 bool verifyCertificate,
237- CallBack callBack )
241+ JsonCallback callback )
238242{
239243 Q_ASSERT (!filePath.isEmpty ());
240244 auto *file = new QFile (filePath, this );
@@ -261,7 +265,7 @@ QNetworkReply *HttpClient::upload_post(const QUrl &url,
261265 file->setParent (reply);
262266 multiPart->setParent (reply);
263267 d_ptr->uploads .insert (reply, file);
264- connectUploadSlots (reply, timeout, callBack );
268+ connectUploadSlots (reply, timeout, callback );
265269 return reply;
266270}
267271
@@ -270,7 +274,7 @@ QNetworkReply *HttpClient::upload_post(const QUrl &url,
270274 const QByteArray &data,
271275 int timeout,
272276 bool verifyCertificate,
273- CallBack callBack )
277+ JsonCallback callback )
274278{
275279 qDebug () << QString (" Upload To %1" ).arg (url.toString (QUrl::RemoveUserInfo) + " /" + filename);
276280 auto disposition = QString (" form-data; name=\" %1\" ; filename=\" %2\" " ).arg (" file" , filename);
@@ -285,7 +289,7 @@ QNetworkReply *HttpClient::upload_post(const QUrl &url,
285289
286290 auto *reply = QNetworkAccessManager::post (request, multiPart);
287291 multiPart->setParent (reply);
288- connectUploadSlots (reply, timeout, callBack );
292+ connectUploadSlots (reply, timeout, callback );
289293 return reply;
290294}
291295
@@ -360,11 +364,11 @@ void HttpClient::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
360364 if (!download) {
361365 return ;
362366 }
363- auto progressCallBack = download->progressCallBack ;
364- if (!progressCallBack ) {
367+ auto progressCallback = download->progressCallback ;
368+ if (!progressCallback ) {
365369 return ;
366370 }
367- progressCallBack (bytesReceived + download->fileBaseSize , bytesTotal + download->fileBaseSize );
371+ progressCallback (bytesReceived + download->fileBaseSize , bytesTotal + download->fileBaseSize );
368372}
369373
370374void HttpClient::onDownloadReadyRead ()
@@ -391,25 +395,18 @@ void HttpClient::onDownloadFinish()
391395 }
392396
393397 auto *download = d_ptr->downloads .value (reply);
394- if (download) {
395- if (! download->filePtr . isNull ()) {
396- download->filePtr ->write (reply-> readAll () );
397- download->filePtr ->flush ();
398- download->filePtr -> close ();
399- if (QFile::exists (download->filePath )) {
400- QFile::remove ( download->filePath ) ;
398+ if (download && !download-> filePtr . isNull () ) {
399+ download->filePtr -> write (reply-> readAll ());
400+ download->filePtr ->flush ( );
401+ download->filePtr ->close ();
402+ if ( QFile::exists ( download->filePath )) {
403+ if (! QFile::remove (download->filePath )) {
404+ qWarning () << " Failed to remove existing file: " << download->filePath ;
401405 }
402- download->filePtr ->rename (download->filePath );
403406 }
404- }
405- queryResult (reply, {});
406- }
407-
408- void HttpClient::onUploadFinish ()
409- {
410- auto *reply = qobject_cast<QNetworkReply *>(sender ());
411- if (!reply) {
412- return ;
407+ if (!download->filePtr ->rename (download->filePath )) {
408+ qWarning () << " Failed to rename temp file to:" << download->filePath ;
409+ }
413410 }
414411 queryResult (reply, {});
415412}
@@ -419,12 +416,12 @@ QJsonObject HttpClient::hookResult(const QJsonObject &object)
419416 return object;
420417}
421418
422- void HttpClient::connectUploadSlots (QNetworkReply *reply, int timeout, CallBack callBack )
419+ void HttpClient::connectUploadSlots (QNetworkReply *reply, int timeout, JsonCallback callback )
423420{
424- d_ptr->tasks .insert (reply, callBack );
421+ d_ptr->tasks .insert (reply, callback );
425422 connect (reply, &QNetworkReply::errorOccurred, this , &HttpClient::onErrorOccurred);
426423 connect (reply, &QNetworkReply::sslErrors, this , &HttpClient::onSslErrors);
427- connect (reply, &QNetworkReply::finished, this , &HttpClient::onUploadFinish );
424+ connect (reply, &QNetworkReply::finished, this , &HttpClient::onReplyFinish );
428425 if (timeout > 0 ) {
429426 auto *timer = new QTimer (reply);
430427 connect (timer, &QTimer::timeout, this , &HttpClient::onNetworkTimeout);
@@ -435,11 +432,14 @@ void HttpClient::connectUploadSlots(QNetworkReply *reply, int timeout, CallBack
435432void HttpClient::queryResult (QNetworkReply *reply, const QJsonObject &object)
436433{
437434 qDebug () << object;
438- auto callBack = d_ptr->tasks .value (reply);
435+
436+ disconnect (reply, nullptr , this , nullptr );
437+
438+ auto callback = d_ptr->tasks .value (reply);
439439 d_ptr->clearTask (reply);
440440 auto json = hookResult (object);
441- if (callBack ) {
442- callBack (json);
441+ if (callback ) {
442+ callback (json);
443443 }
444444 emit ready (reply, json);
445445
0 commit comments