summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Springer <eric.springer@nokia.com>2011-07-25 16:30:13 +1000
committerDon Sanders <don.sanders@nokia.com>2011-07-26 17:37:57 +1000
commit17bee52ec7db8392cead197feb3170f2d3e03a12 (patch)
tree208b7e144121670e87143cc41fb02b722b160180
parentad6c7033e0673ea6bb9222cd0079cf665b693c80 (diff)
Make sure durability is preserved for updated messages2011W26_sales1
-rw-r--r--src/libraries/qmfclient/qmailstore_p.cpp30
-rw-r--r--src/plugins/contentmanagers/qmfstoragemanager/qmfstoragemanager.cpp4
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;
}