summaryrefslogtreecommitdiffstats
path: root/src/plugins/messageservices/imap/imapstrategy.cpp
diff options
context:
space:
mode:
authorDon Sanders <don.sanders@nokia.com>2011-11-21 19:40:27 +1000
committerDon Sanders <don.sanders@nokia.com>2011-11-21 19:40:27 +1000
commitc7723e6587d7d1cbe7768411b3cca32d29f1eca8 (patch)
tree4872b47dbda0f694a07c48af4fb00c1effd25783 /src/plugins/messageservices/imap/imapstrategy.cpp
parent48dc063ab31202a4bf89b2185fd6c4463832f426 (diff)
Added QMailSearchAction::countMessages function, and QMailMessageServer::messagesCount signal.
QMailSearchAction::countMessages(const QMailMessageKey &filter, const QString &bodyText) function Requests that the message server count all messages that match the criteria specified by \a filter. If \a bodyText is non-empty then messages that contain the supplied text in their content will also be matched and counted. It should be implemented for all protocol plugins for accounts with the QMailAccount::CanSearchOnServer flag set. Implemented for IMAP plugin, accelerated by use of ESEARH IMAP extension when supported by the remote server. QMailSearchAction::messagesCount(uint count) This signal emits the \a count of matching messages on the remote server. Only emitted for remote searches. Emitted by countMessages, and searchMessages functions. uint QMailSearchAction::messagesCount() const Returns the count of matching messages on the remote server. Also implemented boiler plate code in QMailMessageServer etc.
Diffstat (limited to 'src/plugins/messageservices/imap/imapstrategy.cpp')
-rw-r--r--src/plugins/messageservices/imap/imapstrategy.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/plugins/messageservices/imap/imapstrategy.cpp b/src/plugins/messageservices/imap/imapstrategy.cpp
index c97850a0..4e654187 100644
--- a/src/plugins/messageservices/imap/imapstrategy.cpp
+++ b/src/plugins/messageservices/imap/imapstrategy.cpp
@@ -480,6 +480,11 @@ void ImapStrategyContextBase::remainingMessagesCount(uint count)
emit _client->remainingMessagesCount(count);
}
+void ImapStrategyContextBase::messagesCount(uint count)
+{
+ emit _client->messagesCount(count);
+}
+
/* A basic strategy to achieve an authenticated state with the server,
and to provide default responses to IMAP command completion notifications,
*/
@@ -1712,13 +1717,14 @@ void ImapFetchSelectedMessagesStrategy::itemFetched(ImapStrategyContextBase *con
}
/* A strategy to search all folders */
-void ImapSearchMessageStrategy::searchArguments(const QMailMessageKey &searchCriteria, const QString &bodyText, quint64 limit, const QMailMessageSortKey &sort)
+void ImapSearchMessageStrategy::searchArguments(const QMailMessageKey &searchCriteria, const QString &bodyText, quint64 limit, const QMailMessageSortKey &sort, bool count)
{
SearchData search;
search.criteria = searchCriteria;
search.bodyText = bodyText;
search.limit = limit;
search.sort = sort;
+ search.count = count;
_searches.append(search);
_canceled = false;
@@ -1729,6 +1735,7 @@ void ImapSearchMessageStrategy::cancelSearch()
_searches.clear();
_canceled = true;
_limit = -1;
+ _count = false;
}
void ImapSearchMessageStrategy::transition(ImapStrategyContextBase *c, ImapCommand cmd, OperationStatus status)
@@ -1750,6 +1757,7 @@ void ImapSearchMessageStrategy::folderListCompleted(ImapStrategyContextBase *con
if(_currentMailbox.id().isValid()) {
_searches.removeFirst();
_limit = -1;
+ _count = false;
} else {
QSet<QMailFolderId> accountFolders(_mailboxList.toSet());
@@ -1771,7 +1779,8 @@ void ImapSearchMessageStrategy::folderListFolderAction(ImapStrategyContextBase *
SearchData search(_searches.first());
_limit = search.limit;
- context->protocol().sendSearchMessages(search.criteria, search.bodyText, search.sort);
+ _count = search.count;
+ context->protocol().sendSearchMessages(search.criteria, search.bodyText, search.sort, _count);
}
bool ImapSearchMessageStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message)
@@ -1812,6 +1821,12 @@ void ImapSearchMessageStrategy::handleSearchMessage(ImapStrategyContextBase *con
QList<QMailMessageId> searchResults;
IntegerRegion uidsToFetch;
+ if (_count) {
+ context->messagesCount(properties.searchCount);
+ processNextFolder(context);
+ return;
+ }
+
foreach(const QString &uidString, properties.uidList) {
QMailMessageIdList ids(QMailStore::instance()->queryMessages(QMailMessageKey::serverUid(uidString) & QMailMessageKey::parentAccountId(context->config().id())));
Q_ASSERT(ids.size() == 1 || ids.size() == 0);
@@ -1821,6 +1836,8 @@ void ImapSearchMessageStrategy::handleSearchMessage(ImapStrategyContextBase *con
uidsToFetch.add(stripFolderPrefix(uidString).toInt());
}
+ context->messagesCount(properties.searchCount);
+
if(!searchResults.isEmpty())
context->matchingMessageIds(searchResults);