From f308a6b57be0a79bef93d8b088dca1c2baf9f105 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 3 Aug 2021 14:04:52 -0400 Subject: export: clean up temp file after divelogs.de upload This adds a cleanup function to be called after a divelogs.de upload finishes (successful or not) to make sure the temporary zip file is closed and removed. Signed-off-by: Richard Fuchs --- core/uploadDiveLogsDE.cpp | 23 +++++++++++++++++------ core/uploadDiveLogsDE.h | 3 +++ 2 files changed, 20 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/core/uploadDiveLogsDE.cpp b/core/uploadDiveLogsDE.cpp index a9c39bf11..18377698d 100644 --- a/core/uploadDiveLogsDE.cpp +++ b/core/uploadDiveLogsDE.cpp @@ -40,9 +40,7 @@ static QString makeTempFileName() QTemporaryFile tmpfile; tmpfile.setFileTemplate(QDir::tempPath() + "/divelogsde-upload.XXXXXXXX.dld"); tmpfile.open(); - QString filename(tmpfile.fileName()); - tmpfile.close(); - return filename; + return tmpfile.fileName(); } @@ -196,6 +194,13 @@ bool uploadDiveLogsDE::prepareDives(const QString &tempfile, bool selected) } +void uploadDiveLogsDE::cleanupTempFile() +{ + if (tempFile.isOpen()) + tempFile.remove(); +} + + void uploadDiveLogsDE::uploadDives(const QString &filename, const QString &userid, const QString &password) { QHttpPart part1, part2, part3; @@ -219,12 +224,15 @@ void uploadDiveLogsDE::uploadDives(const QString &filename, const QString &useri // prepare header with filename (of all dives) and pointer to file args = "form-data; name=\"userfile\"; filename=\"" + filename + "\""; part1.setRawHeader("Content-Disposition", args.toLatin1()); - QFile *f = new QFile(filename); - if (!f->open(QIODevice::ReadOnly)) { + + // open new file for reading + cleanupTempFile(); + tempFile.setFileName(filename); + if (!tempFile.open(QIODevice::ReadOnly)) { qDebug() << "ERROR opening zip file: " << filename; return; } - part1.setBodyDevice(f); + part1.setBodyDevice(&tempFile); multipart->append(part1); // Add userid @@ -289,6 +297,7 @@ void uploadDiveLogsDE::uploadFinishedSlot() QByteArray xmlData = reply->readAll(); reply->deleteLater(); reply = NULL; + cleanupTempFile(); char *resp = xmlData.data(); if (resp) { char *parsed = strstr(resp, ""); @@ -324,6 +333,7 @@ void uploadDiveLogsDE::uploadTimeoutSlot() reply->deleteLater(); reply = NULL; } + cleanupTempFile(); QString err(tr("divelogs.de not responding")); report_error(err.toUtf8()); emit uploadFinish(false, err); @@ -337,6 +347,7 @@ void uploadDiveLogsDE::uploadErrorSlot(QNetworkReply::NetworkError error) reply->deleteLater(); reply = NULL; } + cleanupTempFile(); QString err(tr("network error %1").arg(error)); report_error(err.toUtf8()); emit uploadFinish(false, err); diff --git a/core/uploadDiveLogsDE.h b/core/uploadDiveLogsDE.h index da47b14af..0259d1fb1 100644 --- a/core/uploadDiveLogsDE.h +++ b/core/uploadDiveLogsDE.h @@ -4,6 +4,7 @@ #include #include #include +#include class uploadDiveLogsDE : public QObject { @@ -28,10 +29,12 @@ private: uploadDiveLogsDE(); void uploadDives(const QString &filename, const QString &userid, const QString &password); + void cleanupTempFile(); // only to be used in desktop-widgets::subsurfacewebservices bool prepareDives(const QString &tempfile, bool selected); + QFile tempFile; QNetworkReply *reply; QHttpMultiPart *multipart; QTimer timeout; -- cgit v1.2.3-70-g09d2