summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Sanders <don.sanders@nokia.com>2012-04-03 13:18:26 +0300
committerDon Sanders <don.sanders@nokia.com>2012-04-03 13:18:26 +0300
commit20c1040af9702082425300886c929aef01047f1b (patch)
tree4fa442d85a3794e569edeff8e5d6c18367cdc660
parentdd2c141ad233c61e280b7b33e4d69bd61bb4245f (diff)
Ensure temporary files are deleted.
Patch from Edit Siket-Szasz
-rw-r--r--src/plugins/messageservices/imap/imapclient.cpp13
-rw-r--r--src/plugins/messageservices/imap/imapclient.h2
-rw-r--r--src/plugins/messageservices/imap/imapstrategy.cpp1
3 files changed, 16 insertions, 0 deletions
diff --git a/src/plugins/messageservices/imap/imapclient.cpp b/src/plugins/messageservices/imap/imapclient.cpp
index e0a38f35..52226570 100644
--- a/src/plugins/messageservices/imap/imapclient.cpp
+++ b/src/plugins/messageservices/imap/imapclient.cpp
@@ -1307,6 +1307,8 @@ void ImapClient::dataFetched(const QString &uid, const QString &section, const Q
mail = new QMailMessage(uid, _config.id());
}
+ detachedTempFiles.insertMulti(mail->id(),fileName);
+
if (mail->id().isValid()) {
if (section.isEmpty()) {
// This is the body of the message, or a part thereof
@@ -1408,6 +1410,7 @@ void ImapClient::dataFetched(const QString &uid, const QString &section, const Q
// These updates cannot be effected by storing the data file directly
if (!mail->customField("qmf-detached-filename").isEmpty()) {
+ QFile::remove(mail->customField("qmf-detached-filename"));
mail->removeCustomField("qmf-detached-filename");
}
}
@@ -1728,6 +1731,16 @@ void ImapClient::messageBufferFlushed()
void ImapClient::removeAllFromBuffer(QMailMessage *message)
{
+ if (message) {
+ QMap<QMailMessageId, QString>::const_iterator i = detachedTempFiles.find(message->id());
+ while (i != detachedTempFiles.end() && i.key() == message->id()) {
+ if (!(*i).isEmpty() && QFile::exists(*i)) {
+ QFile::remove(*i);
+ }
+ ++i;
+ }
+ detachedTempFiles.remove(message->id());
+ }
int i = 0;
while ((i = _bufferedMessages.indexOf(message, i)) != -1) {
delete _bufferedMessages.at(i);
diff --git a/src/plugins/messageservices/imap/imapclient.h b/src/plugins/messageservices/imap/imapclient.h
index fd5e6a58..3e7bfec4 100644
--- a/src/plugins/messageservices/imap/imapclient.h
+++ b/src/plugins/messageservices/imap/imapclient.h
@@ -179,6 +179,8 @@ private:
QList<QMailMessageBufferFlushCallback*> callbacks;
QVector<QMailMessage*> _bufferedMessages;
int _pushConnectionsReserved;
+
+ QMap<QMailMessageId,QString> detachedTempFiles;
};
#endif
diff --git a/src/plugins/messageservices/imap/imapstrategy.cpp b/src/plugins/messageservices/imap/imapstrategy.cpp
index 15141a98..78e9b0c8 100644
--- a/src/plugins/messageservices/imap/imapstrategy.cpp
+++ b/src/plugins/messageservices/imap/imapstrategy.cpp
@@ -283,6 +283,7 @@ bool transferMessageData(QMailMessage &message, const QMailMessage &source)
if (!message.customField("qmf-detached-filename").isEmpty()) {
// We have modified the content, so the detached file data is no longer sufficient
+ QFile::remove(message.customField("qmf-detached-filename"));
message.removeCustomField("qmf-detached-filename");
}