summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerio Valerio <valerio.valerio@nokia.com>2012-01-02 10:56:35 +0200
committerValerio Valerio <valerio.valerio@nokia.com>2012-01-02 10:56:35 +0200
commit199908c8a14e78e98e65f229e6f4b48446bf41b2 (patch)
treee7247c5c73e6569ab3d9300058cf8b38097e3a1b
parent82056aabb7feaf7f261b4e1f68d007e0f889f3a8 (diff)
Fix duplicate signal emission of addMessages(Revert of Patrick's patch).
Fix duplicate signal emission of addMessages and updateMessagesMetaData. Add UTs to verify that the signals are emitted only once per message added.
-rw-r--r--src/libraries/qmfclient/qmailstore.cpp7
-rw-r--r--tests/tst_qmailstore/tst_qmailstore.cpp29
2 files changed, 34 insertions, 2 deletions
diff --git a/src/libraries/qmfclient/qmailstore.cpp b/src/libraries/qmfclient/qmailstore.cpp
index b8e50d82..00fb858e 100644
--- a/src/libraries/qmfclient/qmailstore.cpp
+++ b/src/libraries/qmfclient/qmailstore.cpp
@@ -296,6 +296,8 @@ bool QMailStore::addMessages(const QList<QMailMessage*>& messages)
emitMessageNotification(Added, addedMessageIds);
emitThreadNotification(Added, addedThreadIds);
+ emitMessageDataNotification(Added, dataList(messages, addedMessageIds));
+ emitMessageDataNotification(Updated, dataList(messages, updatedMessageIds));
emitMessageNotification(Updated, updatedMessageIds);
emitFolderNotification(ContentsModified, modifiedFolderIds);
emitThreadNotification(ContentsModified, modifiedThreadIds);
@@ -322,6 +324,8 @@ bool QMailStore::addMessages(const QList<QMailMessageMetaData*>& messages)
if (!d->addMessages(messages, &addedMessageIds, &addedThreadIds, &updatedMessageIds, &modifiedFolderIds, &modifiedThreadIds, &modifiedAccountIds))
return false;
+ emitMessageNotification(Added, addedMessageIds);
+ emitMessageNotification(Updated, updatedMessageIds);
emitMessageDataNotification(Added, dataList(messages, addedMessageIds));
emitThreadNotification(Added, addedThreadIds);
emitMessageDataNotification(Updated, dataList(messages, updatedMessageIds));
@@ -690,6 +694,7 @@ bool QMailStore::updateMessagesMetaData(const QMailMessageKey& key,
if (!d->updateMessagesMetaData(key, properties, data, &updatedMessages, &modifiedFolders, &modifiedAccounts))
return false;
+ emitMessageNotification(Updated, updatedMessages);
emitMessageDataNotification(updatedMessages, properties, data);
emitFolderNotification(ContentsModified, modifiedFolders);
emitAccountNotification(ContentsModified, modifiedAccounts);
@@ -1276,8 +1281,6 @@ void QMailStore::emitMessageNotification(ChangeType type, const QMailMessageIdLi
// Ensure there are no duplicates in the list
QMailMessageIdList idList(ids.toSet().toList());
- d->notifyMessagesChange(type, idList);
-
switch (type) {
case Added:
emit messagesAdded(idList);
diff --git a/tests/tst_qmailstore/tst_qmailstore.cpp b/tests/tst_qmailstore/tst_qmailstore.cpp
index 88a1824a..da30fdb0 100644
--- a/tests/tst_qmailstore/tst_qmailstore.cpp
+++ b/tests/tst_qmailstore/tst_qmailstore.cpp
@@ -42,6 +42,7 @@
#include <QObject>
#include <QTest>
#include <QSqlQuery>
+#include <QSignalSpy>
#include <qmailstore.h>
#include <QSettings>
#include <qmailnamespace.h>
@@ -335,6 +336,9 @@ void tst_QMailStore::addFolder()
void tst_QMailStore::addMessage()
{
+ QSignalSpy spyMessagesAdded(QMailStore::instance(), SIGNAL(messagesAdded(QMailMessageIdList)));
+ QSignalSpy spyMessageDataAdded(QMailStore::instance(), SIGNAL(messageDataAdded(QMailMessageMetaDataList)));
+
QMailAccount account;
account.setName("Account");
@@ -423,10 +427,17 @@ void tst_QMailStore::addMessage()
QCOMPARE(message3.customField("answer"), QString("Fido"));
QCOMPARE(message3.dataModified(), false);
QCOMPARE(message3.contentModified(), false);
+
+ //Verify that the signals are only emitted once
+ QCOMPARE(spyMessagesAdded.count(), 1);
+ QCOMPARE(spyMessageDataAdded.count(), 1);
}
void tst_QMailStore::addMessages()
{
+ QSignalSpy spyMessagesAdded(QMailStore::instance(), SIGNAL(messagesAdded(QMailMessageIdList)));
+ QSignalSpy spyMessageDataAdded(QMailStore::instance(), SIGNAL(messageDataAdded(QMailMessageMetaDataList)));
+
QMailAccount account;
account.setName("Account");
@@ -496,6 +507,10 @@ void tst_QMailStore::addMessages()
QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 9, 0), messageIds.mid(0, 9));
QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 9, 1), messageIds.mid(1, 9));
QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 10, 0), messageIds);
+
+ //Verify that the signals are only emitted once
+ QCOMPARE(spyMessagesAdded.count(), 1);
+ QCOMPARE(spyMessageDataAdded.count(), 1);
}
void tst_QMailStore::addMessages2()
@@ -848,6 +863,9 @@ void tst_QMailStore::updateFolder()
void tst_QMailStore::updateMessage()
{
+ QSignalSpy spyMessagesUpdated(QMailStore::instance(), SIGNAL(messagesUpdated(QMailMessageIdList)));
+ QSignalSpy spyMessagesDataUpdated(QMailStore::instance(), SIGNAL(messageDataUpdated(QMailMessageMetaDataList)));
+
QMailAccount account;
account.setName("Account");
@@ -949,6 +967,10 @@ void tst_QMailStore::updateMessage()
QCOMPARE(message2.dataModified(), false);
QCOMPARE(message2.contentModified(), false);
+ //Verify that the signals are only emitted once
+ QCOMPARE(spyMessagesUpdated.count(), 1);
+ QCOMPARE(spyMessagesDataUpdated.count(), 1);
+
// Add an additional message
QMailMessage message3;
message3.setParentAccountId(account.id());
@@ -1117,6 +1139,9 @@ void tst_QMailStore::updateMessage()
void tst_QMailStore::updateMessages()
{
+ QSignalSpy spyMessagesUpdated(QMailStore::instance(), SIGNAL(messagesUpdated(QMailMessageIdList)));
+ QSignalSpy spyMessagesDataUpdated(QMailStore::instance(), SIGNAL(messageDataUpdated(QMailMessageMetaDataList)));
+
QMailAccount account;
account.setName("Account");
@@ -1190,6 +1215,10 @@ void tst_QMailStore::updateMessages()
QCOMPARE(message.subject(), QString("Message %1").arg(i + 100));
QCOMPARE(message.body().data(), QString("Hi #%1").arg(i + 100));
}
+
+ //Verify that the signals are only emitted once
+ QCOMPARE(spyMessagesUpdated.count(), 1);
+ QCOMPARE(spyMessagesDataUpdated.count(), 1);
}
void tst_QMailStore::removeAccount()