diff options
author | Richard Fuchs <dfx@dfx.at> | 2021-08-03 14:04:52 -0400 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2021-08-06 11:05:06 -0700 |
commit | f308a6b57be0a79bef93d8b088dca1c2baf9f105 (patch) | |
tree | 1792151ae4f3483c29dc031eecb48f342af89a98 /core | |
parent | cf78e4cb206d1053800c29fd4f147b048510beb3 (diff) | |
download | subsurface-f308a6b57be0a79bef93d8b088dca1c2baf9f105.tar.gz |
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 <dfx@dfx.at>
Diffstat (limited to 'core')
-rw-r--r-- | core/uploadDiveLogsDE.cpp | 23 | ||||
-rw-r--r-- | core/uploadDiveLogsDE.h | 3 |
2 files changed, 20 insertions, 6 deletions
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, "<Login>"); @@ -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 <QNetworkReply> #include <QHttpMultiPart> #include <QTimer> +#include <QFile> 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; |