diff options
author | Eric Springer <eric.springer@nokia.com> | 2011-07-25 16:30:13 +1000 |
---|---|---|
committer | Don Sanders <don.sanders@nokia.com> | 2011-07-26 17:37:57 +1000 |
commit | 17bee52ec7db8392cead197feb3170f2d3e03a12 (patch) | |
tree | 208b7e144121670e87143cc41fb02b722b160180 | |
parent | ad6c7033e0673ea6bb9222cd0079cf665b693c80 (diff) |
Make sure durability is preserved for updated messages2011W26_sales1
-rw-r--r-- | src/libraries/qmfclient/qmailstore_p.cpp | 30 | ||||
-rw-r--r-- | src/plugins/contentmanagers/qmfstoragemanager/qmfstoragemanager.cpp | 4 |
2 files changed, 21 insertions, 13 deletions
diff --git a/src/libraries/qmfclient/qmailstore_p.cpp b/src/libraries/qmfclient/qmailstore_p.cpp index ba12aa07..f6679ab8 100644 --- a/src/libraries/qmfclient/qmailstore_p.cpp +++ b/src/libraries/qmfclient/qmailstore_p.cpp @@ -4029,8 +4029,8 @@ bool QMailStorePrivate::updateThread(QMailThread *t, bool QMailStorePrivate::updateMessages(const QList<QPair<QMailMessageMetaData*, QMailMessage*> > &messages, QMailMessageIdList *updatedMessageIds, QMailMessageIdList *modifiedMessageIds, QMailFolderIdList *modifiedFolderIds, QMailAccountIdList *modifiedAccountIds) { - QSet<QString> contentSchemes; QMap<QString, QStringList> contentSyncLater; + QMap<QString, QStringList> contentRemoveLater; Transaction t(this); @@ -4039,33 +4039,41 @@ bool QMailStorePrivate::updateMessages(const QList<QPair<QMailMessageMetaData*, foreach (const PairType &pair, messages) { if (!repeatedly<WriteAccess>(bind(&QMailStorePrivate::attemptUpdateMessage, this, pair.first, pair.second, - updatedMessageIds, modifiedMessageIds, modifiedFolderIds, modifiedAccountIds, &contentSyncLater), + updatedMessageIds, modifiedMessageIds, modifiedFolderIds, modifiedAccountIds, &contentRemoveLater), "updateMessages", &t)) { return false; } + } + + + foreach (const PairType &pair, messages) { + QString scheme(pair.first->contentScheme()); - if(!pair.first->contentScheme().isEmpty()) - contentSchemes.insert(pair.first->contentScheme()); + QMap<QString, QStringList>::iterator it(contentSyncLater.find(scheme)); + if (contentSyncLater.find(scheme) != contentSyncLater.end()) { + it.value().append(pair.first->contentIdentifier()); + } else { + contentSyncLater.insert(scheme, QStringList() << pair.first->contentIdentifier()); + } } - // Ensure that the content manager makes the changes durable before we return - foreach (const QString &scheme, contentSchemes) { - if (QMailContentManager *contentManager = QMailContentManagerFactory::create(scheme)) { - QMailStore::ErrorCode code = contentManager->ensureDurability(); + for (QMap<QString, QStringList>::const_iterator it(contentSyncLater.begin()); it != contentSyncLater.end() ; ++it) { + if (QMailContentManager *contentManager = QMailContentManagerFactory::create(it.key())) { + QMailStore::ErrorCode code = contentManager->ensureDurability(it.value()); if (code != QMailStore::NoError) { setLastError(code); - qWarning() << "Unable to ensure message content durability for scheme:" << scheme; + qWarning() << "Unable to ensure message content durability for scheme:" << it.key(); return false; } } else { setLastError(QMailStore::FrameworkFault); - qWarning() << "Unable to create content manager for scheme:" << scheme; + qWarning() << "Unable to create content manager for scheme:" << it.key(); return false; } } - for (QMap<QString, QStringList>::const_iterator it(contentSyncLater.begin()); it != contentSyncLater.end() ; ++it) { + for (QMap<QString, QStringList>::const_iterator it(contentRemoveLater.begin()); it != contentRemoveLater.end() ; ++it) { if (QMailContentManager *contentManager = QMailContentManagerFactory::create(it.key())) { QMailStore::ErrorCode code = contentManager->remove(it.value()); if (code != QMailStore::NoError) { diff --git a/src/plugins/contentmanagers/qmfstoragemanager/qmfstoragemanager.cpp b/src/plugins/contentmanagers/qmfstoragemanager/qmfstoragemanager.cpp index 4ffc1e6f..cf0553e4 100644 --- a/src/plugins/contentmanagers/qmfstoragemanager/qmfstoragemanager.cpp +++ b/src/plugins/contentmanagers/qmfstoragemanager/qmfstoragemanager.cpp @@ -269,7 +269,7 @@ QMailStore::ErrorCode QmfStorageManager::addOrRename(QMailMessage *message, cons return QMailStore::NoError; } } - + QSharedPointer<QFile> file(new QFile(filePath)); if (!file->open(QIODevice::WriteOnly)) { @@ -312,7 +312,7 @@ QMailStore::ErrorCode QmfStorageManager::addOrRename(QMailMessage *message, cons if (!detachedFile.isEmpty()) { QFile::remove(detachedFile); } - + return QMailStore::NoError; } |