diff options
| author | Don Sanders <don.sanders@nokia.com> | 2011-11-21 19:40:27 +1000 |
|---|---|---|
| committer | Don Sanders <don.sanders@nokia.com> | 2011-11-21 19:40:27 +1000 |
| commit | c7723e6587d7d1cbe7768411b3cca32d29f1eca8 (patch) | |
| tree | 4872b47dbda0f694a07c48af4fb00c1effd25783 /src/plugins/messageservices/imap/imapstrategy.cpp | |
| parent | 48dc063ab31202a4bf89b2185fd6c4463832f426 (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.cpp | 21 |
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); |
