aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Richard Fuchs <dfx@dfx.at>2021-08-03 14:04:52 -0400
committerGravatar Dirk Hohndel <dirk@hohndel.org>2021-08-06 11:05:06 -0700
commitf308a6b57be0a79bef93d8b088dca1c2baf9f105 (patch)
tree1792151ae4f3483c29dc031eecb48f342af89a98 /core
parentcf78e4cb206d1053800c29fd4f147b048510beb3 (diff)
downloadsubsurface-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.cpp23
-rw-r--r--core/uploadDiveLogsDE.h3
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;