summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Sanders <don.sanders@nokia.com>2011-07-07 23:10:21 +0800
committerDon Sanders <don.sanders@nokia.com>2011-07-07 23:10:21 +0800
commit52accdde5db7d3ed60cf803692b023eb83632e46 (patch)
tree85fe4f1f147ff4b989ce317866f27289fb592fce
parent6c1880eb0ddca296c7bb0eb284c86a8c7283bf99 (diff)
Add new retrieveMessageLists interface and implementation.2011W26_4
Fix for nb#271151.
-rw-r--r--CHANGES3
-rw-r--r--src/libraries/qmfclient/qmailmessageserver.cpp24
-rw-r--r--src/libraries/qmfclient/qmailmessageserver.h1
-rw-r--r--src/libraries/qmfclient/qmailserviceaction.cpp56
-rw-r--r--src/libraries/qmfclient/qmailserviceaction.h1
-rw-r--r--src/libraries/qmfclient/qmailserviceaction_p.h1
-rw-r--r--src/libraries/qmfmessageserver/qmailmessageservice.cpp60
-rw-r--r--src/libraries/qmfmessageserver/qmailmessageservice.h3
-rw-r--r--src/plugins/messageservices/imap/imapservice.cpp27
-rw-r--r--src/plugins/messageservices/pop/popservice.cpp11
-rw-r--r--src/tools/messageserver/mailmessageclient.cpp2
-rw-r--r--src/tools/messageserver/mailmessageclient.h1
-rw-r--r--src/tools/messageserver/messageserver.cpp2
-rw-r--r--src/tools/messageserver/servicehandler.cpp38
-rw-r--r--src/tools/messageserver/servicehandler.h2
15 files changed, 220 insertions, 12 deletions
diff --git a/CHANGES b/CHANGES
index d187a757..02bd58b2 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,8 @@ Latest Changes
201126
* Fixes: NB#267169 "can't get your message" error shown when going back
* Fixes: NB#195729 ConfigurationError not shown when account is configured with wrong settings
-
+ * Fixes: NB#271151 [TASK] Provide a API that accepts a list of folders to be synced
+
201125
* Fixes: NB#215942 Traditional Chinese character is corrupted in mailbox
* Fixes: NB#232541 Invitations not displayed in the message viewer for Gmail
diff --git a/src/libraries/qmfclient/qmailmessageserver.cpp b/src/libraries/qmfclient/qmailmessageserver.cpp
index 4132a928..fa24f099 100644
--- a/src/libraries/qmfclient/qmailmessageserver.cpp
+++ b/src/libraries/qmfclient/qmailmessageserver.cpp
@@ -66,6 +66,7 @@ signals:
void transmitMessages(quint64, const QMailAccountId &accountId);
void retrieveFolderList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
+ void retrieveMessageLists(quint64, const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessageList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessages(quint64, const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
@@ -130,6 +131,8 @@ QMailMessageServerPrivate::QMailMessageServerPrivate(QMailMessageServer* parent)
adaptor, MESSAGE(retrieveFolderList(quint64, QMailAccountId, QMailFolderId, bool)));
connectIpc(this, SIGNAL(retrieveMessageList(quint64, QMailAccountId, QMailFolderId, uint, QMailMessageSortKey)),
adaptor, MESSAGE(retrieveMessageList(quint64, QMailAccountId, QMailFolderId, uint, QMailMessageSortKey)));
+ connectIpc(this, SIGNAL(retrieveMessageLists(quint64, QMailAccountId, QMailFolderIdList, uint, QMailMessageSortKey)),
+ adaptor, MESSAGE(retrieveMessageLists(quint64, QMailAccountId, QMailFolderIdList, uint, QMailMessageSortKey)));
connectIpc(this, SIGNAL(retrieveMessages(quint64, QMailMessageIdList, QMailRetrievalAction::RetrievalSpecification)),
adaptor, MESSAGE(retrieveMessages(quint64, QMailMessageIdList, QMailRetrievalAction::RetrievalSpecification)));
connectIpc(this, SIGNAL(retrieveMessagePart(quint64, QMailMessagePart::Location)),
@@ -544,6 +547,27 @@ void QMailMessageServer::retrieveMessageList(quint64 action, const QMailAccountI
}
/*!
+ Requests that the message server retrieve the list of messages available for the account \a accountId.
+ If \a folderIdList is not empty, then only messages within those folders should be retrieved; otherwise
+ no messages should be retrieved. If a folder messages are being
+ retrieved from contains at least \a minimum messages then the messageserver should ensure that at
+ least \a minimum messages are available from the mail store for that folder; otherwise if the
+ folder contains less than \a minimum messages the messageserver should ensure all the messages for
+ that folder are available from the mail store.
+
+ If \a sort is not empty, the external service will
+ discover the listed messages in the ordering indicated by the sort criterion, if possible.
+
+ The request has the identifier \a action.
+
+ \sa retrievalCompleted()
+*/
+void QMailMessageServer::retrieveMessageLists(quint64 action, const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ emit d->retrieveMessageLists(action, accountId, folderIds, minimum, sort);
+}
+
+/*!
Requests that the message server retrieve data regarding the messages identified by \a messageIds.
If \a spec is \l QMailRetrievalAction::Flags, then the message server should detect if
diff --git a/src/libraries/qmfclient/qmailmessageserver.h b/src/libraries/qmfclient/qmailmessageserver.h
index a36c0eee..1bf14011 100644
--- a/src/libraries/qmfclient/qmailmessageserver.h
+++ b/src/libraries/qmfclient/qmailmessageserver.h
@@ -118,6 +118,7 @@ public slots:
void retrieveFolderList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
void retrieveMessageList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
+ void retrieveMessageLists(quint64, const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessages(quint64, const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
void retrieveMessagePart(quint64, const QMailMessagePart::Location &partLocation);
diff --git a/src/libraries/qmfclient/qmailserviceaction.cpp b/src/libraries/qmfclient/qmailserviceaction.cpp
index a449eac1..be01d4dc 100644
--- a/src/libraries/qmfclient/qmailserviceaction.cpp
+++ b/src/libraries/qmfclient/qmailserviceaction.cpp
@@ -749,6 +749,12 @@ void QMailRetrievalActionPrivate::retrieveMessageList(const QMailAccountId &acco
retrieveMessageListHelper(accountId, folderId, minimum, sort);
}
+void QMailRetrievalActionPrivate::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ Q_ASSERT(!_pendingActions.count());
+ _server->retrieveMessageLists(newAction(), accountId, folderIds, minimum, sort);
+}
+
void QMailRetrievalActionPrivate::retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec)
{
_server->retrieveMessages(newAction(), messageIds, spec);
@@ -840,7 +846,7 @@ void QMailRetrievalActionPrivate::retrievalCompleted(quint64 action)
A range of functions are available to support varying client operations:
The retrieveFolderList() function allows a client to retrieve the list of folders available for an account.
- The retrieveMessageList() function allows a client to retrieve a subset of messages available for an account or folder.
+ The retrieveMessageList() and retrieveMessageLists() functions allows a client to retrieve a subset of messages available for an account or folder.
The retrieveMessages() function allows a client to retrieve the flags, meta data or content of a
specific list of messages.
@@ -897,7 +903,7 @@ QMailRetrievalAction::~QMailRetrievalAction()
folder that is searched for child folders; these properties are not updated
for folders that are merely discovered by searching.
- \sa retrieveMessageList()
+ \sa retrieveMessageList(), retrieveMessageLists()
*/
void QMailRetrievalAction::retrieveFolderList(const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending)
{
@@ -939,6 +945,48 @@ void QMailRetrievalAction::retrieveMessageList(const QMailAccountId &accountId,
}
/*!
+ Requests that the message server retrieve the list of messages available for the account \a accountId.
+ If \a folderIds is not empty, then only messages within those folders should be retrieved and the
+ lastSynchronized() time of the account updated; otherwise
+ no messages should be retrieved, . If \a minimum is non-zero, then that value will be used to restrict the
+ number of messages to be retrieved from each folder; otherwise, all messages will be retrieved.
+
+ If \a sort is not empty, the external service will report the discovered messages in the
+ ordering indicated by the sort criterion, if possible. Services are not required to support
+ this facility.
+
+ If a folder messages are being retrieved from contains at least \a minimum messages then the
+ messageserver should ensure that at least \a minimum messages are available from the mail
+ store for that folder; otherwise if the folder contains less than \a minimum messages the
+ messageserver should ensure all the messages for that folder are available from the mail store.
+ If a folder has messages locally available, then all previously undiscovered messages will be
+ retrieved for that folder, even if that number exceeds \a minimum.
+
+ The QMailFolder::serverCount(), QMailFolder::serverUnreadCount() and
+ QMailFolder::serverUndiscoveredCount() properties will be updated for each folder
+ from which messages are retrieved.
+
+ New messages will be added to the mail store as they are discovered, and
+ marked with the \l QMailMessage::New status flag. Messages that are present
+ in the mail store but found to be no longer available are marked with the
+ \l QMailMessage::Removed status flag.
+
+ \sa QMailAccount::lastSynchronized()
+*/
+void QMailRetrievalAction::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ if (folderIds.isEmpty()) {
+ // nothing to do
+ impl(this)->newAction();
+ impl(this)->setActivity(QMailServiceAction::Successful);
+ impl(this)->emitChanges();
+ return;
+ }
+
+ impl(this)->retrieveMessageLists(accountId, folderIds, minimum, sort);
+}
+
+/*!
Requests that the message server retrieve data regarding the messages identified by \a messageIds.
If \a spec is \l QMailRetrievalAction::Flags, then the message server should detect if
@@ -1020,7 +1068,7 @@ void QMailRetrievalAction::retrieveMessagePartRange(const QMailMessagePart::Loca
marked with the \l QMailMessage::New status flag. Messages that are no longer
available will be marked with the \l QMailMessage::Removed status flag.
- \sa retrieveFolderList(), retrieveMessageList()
+ \sa retrieveFolderList(), retrieveMessageList(), retrieveMessageLists()
*/
void QMailRetrievalAction::retrieveAll(const QMailAccountId &accountId)
{
@@ -1070,7 +1118,7 @@ void QMailRetrievalAction::exportUpdates(const QMailAccountId &accountId)
the external server. The QMailFolder::serverCount(), QMailFolder::serverUnreadCount() and
QMailFolder::serverUndiscoveredCount() properties will be updated for each folder.
- \sa retrieveFolderList(), retrieveMessageList(), exportUpdates()
+ \sa retrieveFolderList(), retrieveMessageList(), retrieveMessageLists(), exportUpdates()
*/
void QMailRetrievalAction::synchronizeAll(const QMailAccountId &accountId)
{
diff --git a/src/libraries/qmfclient/qmailserviceaction.h b/src/libraries/qmfclient/qmailserviceaction.h
index 6231ec9b..c4771446 100644
--- a/src/libraries/qmfclient/qmailserviceaction.h
+++ b/src/libraries/qmfclient/qmailserviceaction.h
@@ -179,6 +179,7 @@ public:
public slots:
void retrieveFolderList(const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending = true);
void retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum = 0, const QMailMessageSortKey &sort = QMailMessageSortKey());
+ void retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum = 0, const QMailMessageSortKey &sort = QMailMessageSortKey());
void retrieveMessages(const QMailMessageIdList &messageIds, RetrievalSpecification spec = MetaData);
void retrieveMessagePart(const QMailMessagePart::Location &partLocation);
diff --git a/src/libraries/qmfclient/qmailserviceaction_p.h b/src/libraries/qmfclient/qmailserviceaction_p.h
index 6359a19f..bdfef0ea 100644
--- a/src/libraries/qmfclient/qmailserviceaction_p.h
+++ b/src/libraries/qmfclient/qmailserviceaction_p.h
@@ -152,6 +152,7 @@ public:
void retrieveFolderList(const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
void retrieveMessageListHelper(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
+ void retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
void retrieveMessagePart(const QMailMessagePart::Location &partLocation);
diff --git a/src/libraries/qmfmessageserver/qmailmessageservice.cpp b/src/libraries/qmfmessageserver/qmailmessageservice.cpp
index fa8ffb34..d10eea86 100644
--- a/src/libraries/qmfmessageserver/qmailmessageservice.cpp
+++ b/src/libraries/qmfmessageserver/qmailmessageservice.cpp
@@ -441,7 +441,7 @@ QMailStore::MessageRemovalOption QMailMessageSource::messageRemovalOption() cons
Return true if an operation is initiated.
- \sa retrieveMessageList()
+ \sa retrieveMessageList(), retrieveMessageLists()
*/
bool QMailMessageSource::retrieveFolderList(const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending)
{
@@ -482,7 +482,7 @@ bool QMailMessageSource::retrieveFolderList(const QMailAccountId &accountId, con
Return true if an operation is initiated.
- \sa QMailAccount::lastSynchronized()
+ \sa QMailAccount::lastSynchronized(), retrieveMessageLists()
*/
bool QMailMessageSource::retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort)
{
@@ -496,6 +496,48 @@ bool QMailMessageSource::retrieveMessageList(const QMailAccountId &accountId, co
}
/*!
+ Retrieve the list of messages available for the account \a accountId.
+ If \a folderIds is not empty, then only messages within those folders should be retrieved and
+ the lastSynchronized() time of the account updated; otherwise
+ no messages should be retrieved. If \a minimum is non-zero, then that value will be used to restrict the
+ number of messages to be retrieved from each folder; otherwise, all messages will be retrieved.
+
+ If \a sort is not empty, the external service will report the discovered messages in the
+ ordering indicated by the sort criterion, if possible. Services are not required to support
+ this facility.
+
+ If a folder messages are being retrieved from contains at least \a minimum messages then the
+ messageserver should ensure that at least \a minimum messages are available from the mail
+ store for that folder; otherwise if the folder contains less than \a minimum messages the
+ messageserver should ensure all the messages for that folder are available from the mail store.
+ If a folder has messages locally available, then all previously undiscovered messages will be
+ retrieved for that folder, even if that number exceeds \a minimum.
+
+ The QMailFolder::serverCount(), QMailFolder::serverUnreadCount() and
+ QMailFolder::serverUndiscoveredCount() properties will be updated for each folder
+ from which messages are retrieved.
+
+ New messages will be added to the mail store as they are discovered, and
+ marked with the \l QMailMessage::New status flag. Messages that are present
+ in the mail store but found to be no longer available are marked with the
+ \l QMailMessage::Removed status flag.
+
+ Return true if an operation is initiated.
+
+ \sa QMailAccount::lastSynchronized(), retrieveMessageList()
+*/
+bool QMailMessageSource::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ Q_UNUSED(accountId)
+ Q_UNUSED(folderIds)
+ Q_UNUSED(minimum)
+ Q_UNUSED(sort)
+
+ notImplemented();
+ return false;
+}
+
+/*!
Invoked by the message server to initiate a message retrieval operation.
Retrieve data regarding each of the messages listed in \a ids.
@@ -604,7 +646,7 @@ bool QMailMessageSource::retrieveMessagePartRange(const QMailMessagePart::Locati
Return true if an operation is initiated.
- \sa QMailAccount::lastSynchronized(), retrieveFolderList(), retrieveMessageList(), synchronize()
+ \sa QMailAccount::lastSynchronized(), retrieveFolderList(), retrieveMessageList(), retrieveMessageLists(), synchronize()
*/
bool QMailMessageSource::retrieveAll(const QMailAccountId &accountId)
{
@@ -1485,6 +1527,18 @@ bool QMailMessageSource::retrieveMessageList(const QMailAccountId &accountId, co
return false;
}
+bool QMailMessageSource::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort, quint64 action)
+{
+ Q_UNUSED(accountId)
+ Q_UNUSED(folderIds)
+ Q_UNUSED(minimum)
+ Q_UNUSED(sort)
+ Q_UNUSED(action)
+
+ notImplemented(action);
+ return false;
+}
+
bool QMailMessageSource::retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec, quint64 action)
{
Q_UNUSED(messageIds)
diff --git a/src/libraries/qmfmessageserver/qmailmessageservice.h b/src/libraries/qmfmessageserver/qmailmessageservice.h
index 09e137f4..0d09f65c 100644
--- a/src/libraries/qmfmessageserver/qmailmessageservice.h
+++ b/src/libraries/qmfmessageserver/qmailmessageservice.h
@@ -130,6 +130,9 @@ public slots:
virtual bool retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
virtual bool retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort, quint64 action);
+ virtual bool retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
+ virtual bool retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort, quint64 action);
+
virtual bool retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
virtual bool retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec, quint64 action);
virtual bool retrieveMessagePart(const QMailMessagePart::Location &partLocation);
diff --git a/src/plugins/messageservices/imap/imapservice.cpp b/src/plugins/messageservices/imap/imapservice.cpp
index 5df086af..60d901ac 100644
--- a/src/plugins/messageservices/imap/imapservice.cpp
+++ b/src/plugins/messageservices/imap/imapservice.cpp
@@ -117,7 +117,9 @@ signals:
public slots:
virtual bool retrieveFolderList(const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
+ virtual bool retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
virtual bool retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
+ virtual bool retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &_folderIds, uint minimum, const QMailMessageSortKey &sort, bool retrieveAll);
virtual bool retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
virtual bool retrieveMessagePart(const QMailMessagePart::Location &partLocation);
@@ -203,8 +205,24 @@ bool ImapService::Source::retrieveFolderList(const QMailAccountId &accountId, co
return true;
}
+bool ImapService::Source::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ if (folderIds.isEmpty()) {
+ _service->errorOccurred(QMailServiceAction::Status::ErrInvalidData, tr("No folders specified"));
+ return false;
+ }
+
+ return retrieveMessageLists(accountId, folderIds, minimum, sort, true /* accountCheck */);
+}
+
bool ImapService::Source::retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort)
{
+ bool accountCheck = !folderId.isValid();
+ return retrieveMessageLists(accountId, QMailFolderIdList() << folderId, minimum, sort, accountCheck);
+}
+
+bool ImapService::Source::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &_folderIds, uint minimum, const QMailMessageSortKey &sort, bool accountCheck)
+{
if (!_service->_client) {
_service->errorOccurred(QMailServiceAction::Status::ErrFrameworkFault, tr("Account disabled"));
return false;
@@ -223,17 +241,18 @@ bool ImapService::Source::retrieveMessageList(const QMailAccountId &accountId, c
uint adjustedMinimum = minimum ? minimum : INT_MAX; // zero means retrieve all mail
_service->_client->strategyContext()->retrieveMessageListStrategy.clearSelection();
_service->_client->strategyContext()->retrieveMessageListStrategy.setMinimum(adjustedMinimum);
- if (folderId.isValid()) {
- folderIds.append(folderId);
- _service->_client->strategyContext()->retrieveMessageListStrategy.setAccountCheck(false);
+ if (!_folderIds.isEmpty()) {
+ folderIds = _folderIds;
} else {
// Retrieve messages for all folders in the account that have undiscovered messages
QMailFolderKey accountKey(QMailFolderKey::parentAccountId(accountId));
QMailFolderKey canSelectKey(QMailFolderKey::status(QMailFolder::MessagesPermitted));
QMailFolderKey filterKey(accountKey & canSelectKey);
folderIds = QMailStore::instance()->queryFolders(filterKey, QMailFolderSortKey::id(Qt::AscendingOrder));
- _service->_client->strategyContext()->retrieveMessageListStrategy.setAccountCheck(true);
}
+ // accountCheck false, just retrieve new mail or minimum mails whichever is more
+ // accountCheck is true, also update status of messages on device, and detect removed messages
+ _service->_client->strategyContext()->retrieveMessageListStrategy.setAccountCheck(accountCheck);
_service->_client->strategyContext()->retrieveMessageListStrategy.setOperation(_service->_client->strategyContext(), QMailRetrievalAction::Auto);
_service->_client->strategyContext()->retrieveMessageListStrategy.selectedFoldersAppend(folderIds);
diff --git a/src/plugins/messageservices/pop/popservice.cpp b/src/plugins/messageservices/pop/popservice.cpp
index 897d0c41..1e855eee 100644
--- a/src/plugins/messageservices/pop/popservice.cpp
+++ b/src/plugins/messageservices/pop/popservice.cpp
@@ -82,6 +82,7 @@ public:
public slots:
virtual bool retrieveFolderList(const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
virtual bool retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
+ virtual bool retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
virtual bool retrieveMessages(const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
@@ -124,6 +125,16 @@ bool PopService::Source::retrieveFolderList(const QMailAccountId &accountId, con
Q_UNUSED(folderId)
}
+bool PopService::Source::retrieveMessageLists(const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ if (folderIds.isEmpty()) {
+ _service->errorOccurred(QMailServiceAction::Status::ErrInvalidData, tr("No folders specified"));
+ return false;
+ }
+
+ return retrieveMessageList(accountId, QMailFolderId(), minimum, sort);
+}
+
bool PopService::Source::retrieveMessageList(const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort)
{
if (!accountId.isValid()) {
diff --git a/src/tools/messageserver/mailmessageclient.cpp b/src/tools/messageserver/mailmessageclient.cpp
index ddcbefcd..715f28b6 100644
--- a/src/tools/messageserver/mailmessageclient.cpp
+++ b/src/tools/messageserver/mailmessageclient.cpp
@@ -106,6 +106,8 @@ MailMessageClient::MailMessageClient(QObject* parent)
this, SIGNAL(transmitMessages(quint64, QMailAccountId)));
connectIpc(adaptor, MESSAGE(retrieveFolderList(quint64, QMailAccountId, QMailFolderId, bool)),
this, SIGNAL(retrieveFolderList(quint64, QMailAccountId, QMailFolderId, bool)));
+ connectIpc(adaptor, MESSAGE(retrieveMessageLists(quint64, QMailAccountId, QMailFolderIdList, uint, QMailMessageSortKey)),
+ this, SIGNAL(retrieveMessageLists(quint64, QMailAccountId, QMailFolderIdList, uint, QMailMessageSortKey)));
connectIpc(adaptor, MESSAGE(retrieveMessageList(quint64, QMailAccountId, QMailFolderId, uint, QMailMessageSortKey)),
this, SIGNAL(retrieveMessageList(quint64, QMailAccountId, QMailFolderId, uint, QMailMessageSortKey)));
connectIpc(adaptor, MESSAGE(retrieveMessages(quint64, QMailMessageIdList, QMailRetrievalAction::RetrievalSpecification)),
diff --git a/src/tools/messageserver/mailmessageclient.h b/src/tools/messageserver/mailmessageclient.h
index 43616425..b21a44a8 100644
--- a/src/tools/messageserver/mailmessageclient.h
+++ b/src/tools/messageserver/mailmessageclient.h
@@ -71,6 +71,7 @@ signals:
void retrieveFolderList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
void retrieveMessageList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
+ void retrieveMessageLists(quint64, const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessages(quint64, const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
void retrieveMessagePart(quint64, const QMailMessagePart::Location &partLocation);
diff --git a/src/tools/messageserver/messageserver.cpp b/src/tools/messageserver/messageserver.cpp
index 5796e1be..b5f2a275 100644
--- a/src/tools/messageserver/messageserver.cpp
+++ b/src/tools/messageserver/messageserver.cpp
@@ -165,6 +165,8 @@ MessageServer::MessageServer(QObject *parent)
handler, SLOT(retrieveFolderList(quint64, QMailAccountId, QMailFolderId, bool)));
connect(client, SIGNAL(retrieveMessageList(quint64, QMailAccountId, QMailFolderId, uint, QMailMessageSortKey)),
handler, SLOT(retrieveMessageList(quint64, QMailAccountId, QMailFolderId, uint, QMailMessageSortKey)));
+ connect(client, SIGNAL(retrieveMessageLists(quint64, QMailAccountId, QMailFolderIdList, uint, QMailMessageSortKey)),
+ handler, SLOT(retrieveMessageLists(quint64, QMailAccountId, QMailFolderIdList, uint, QMailMessageSortKey)));
connect(client, SIGNAL(retrieveMessages(quint64, QMailMessageIdList, QMailRetrievalAction::RetrievalSpecification)),
handler, SLOT(retrieveMessages(quint64, QMailMessageIdList, QMailRetrievalAction::RetrievalSpecification)));
connect(client, SIGNAL(retrieveMessagePart(quint64, QMailMessagePart::Location)),
diff --git a/src/tools/messageserver/servicehandler.cpp b/src/tools/messageserver/servicehandler.cpp
index b1d79703..bcd3cd75 100644
--- a/src/tools/messageserver/servicehandler.cpp
+++ b/src/tools/messageserver/servicehandler.cpp
@@ -1393,6 +1393,44 @@ bool ServiceHandler::dispatchRetrieveMessageList(quint64 action, const QByteArra
return true;
}
+void ServiceHandler::retrieveMessageLists(quint64 action, const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort)
+{
+ QSet<QMailMessageService*> sources(sourceServiceSet(accountId));
+ if (sources.isEmpty()) {
+ reportFailure(action, QMailServiceAction::Status::ErrNoConnection, tr("Unable to retrieve message list for unconfigured account"));
+ } else {
+ enqueueRequest(action, serialize(accountId, folderIds, minimum, sort), sources, &ServiceHandler::dispatchRetrieveMessageLists, &ServiceHandler::retrievalCompleted, RetrieveMessageListRequestType);
+ }
+}
+
+bool ServiceHandler::dispatchRetrieveMessageLists(quint64 action, const QByteArray &data)
+{
+ QMailAccountId accountId;
+ QMailFolderIdList folderIds;
+ uint minimum;
+ QMailMessageSortKey sort;
+
+ deserialize(data, accountId, folderIds, minimum, sort);
+
+ if (QMailMessageSource *source = accountSource(accountId)) {
+ bool success(sourceService.value(source)->usesConcurrentActions()
+ ? source->retrieveMessageLists(accountId, folderIds, minimum, sort, action)
+ : source->retrieveMessageLists(accountId, folderIds, minimum, sort));
+ if (success) {
+ // This account is now retrieving
+ setRetrievalInProgress(accountId, true);
+ } else {
+ qWarning() << "Unable to service request to retrieve message list for folders:" << folderIds;
+ return false;
+ }
+ } else {
+ reportFailure(action, QMailServiceAction::Status::ErrFrameworkFault, tr("Unable to locate source for account"), accountId);
+ return false;
+ }
+
+ return true;
+}
+
void ServiceHandler::retrieveMessages(quint64 action, const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec)
{
QMap<QMailAccountId, QMailMessageIdList> messageLists(accountMessages(messageIds));
diff --git a/src/tools/messageserver/servicehandler.h b/src/tools/messageserver/servicehandler.h
index d939f2ef..779f9a05 100644
--- a/src/tools/messageserver/servicehandler.h
+++ b/src/tools/messageserver/servicehandler.h
@@ -69,6 +69,7 @@ public slots:
void transmitMessages(quint64 action, const QMailAccountId &accountId);
void retrieveFolderList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, bool descending);
void retrieveMessageList(quint64, const QMailAccountId &accountId, const QMailFolderId &folderId, uint minimum, const QMailMessageSortKey &sort);
+ void retrieveMessageLists(quint64, const QMailAccountId &accountId, const QMailFolderIdList &folderIds, uint minimum, const QMailMessageSortKey &sort);
void retrieveMessages(quint64, const QMailMessageIdList &messageIds, QMailRetrievalAction::RetrievalSpecification spec);
void retrieveMessagePart(quint64, const QMailMessagePart::Location &partLocation);
void retrieveMessageRange(quint64, const QMailMessageId &messageId, uint minimum);
@@ -226,6 +227,7 @@ private:
bool dispatchRetrieveFolderListAccount(quint64, const QByteArray &data);
bool dispatchRetrieveFolderList(quint64, const QByteArray &data);
bool dispatchRetrieveMessageList(quint64, const QByteArray &data);
+ bool dispatchRetrieveMessageLists(quint64, const QByteArray &data);
bool dispatchRetrieveMessages(quint64, const QByteArray &data);
bool dispatchRetrieveMessagePart(quint64, const QByteArray &data);
bool dispatchRetrieveMessageRange(quint64, const QByteArray &data);