void MessagingHelper::filterMessages(QMessageIdList& messageIds, const QMessageFilter& filter) { if (messageIds.count() && !filter.isEmpty()) { QMessageFilterPrivate* pf = QMessageFilterPrivate::implementation(filter); if ((pf->_field == QMessageFilterPrivate::None) && (pf->_filterList.count() == 0)) { if (pf->_notFilter) { // There is only one filter: empty ~QMessageFilter() // => accountIds must be cleared messageIds.clear(); return; } else { // There is only one filter: empty QMessageFilter() // => accountIds list can remain intact return; } } if (pf->_valid) { QMessageStore* store = QMessageStore::instance(); for (int i=messageIds.count()-1; i >= 0; i--) { QMessage message = store->message(messageIds[i]); if (!pf->filter(message)) { messageIds.removeAt(i); } } } } }
QMessageIdList QMFStore::queryMessages(const QMessageFilter &filter, const QString &body, QMessageDataComparator::MatchFlags matchFlags, const QMessageSortOrder &sortOrder, uint limit, uint offset, QMessageManager::Error &error) const { if (filter.matchFlags() != 0) { error = QMessageManager::NotYetImplemented; return QMessageIdList(); } error = QMessageManager::NoError; QMessageIdList ids(convert(d_ptr->_store->queryMessages(convert(filter), convert(sortOrder)))); Qt::CaseSensitivity searchOptions(Qt::CaseInsensitive); if (matchFlags & QMessageDataComparator::MatchCaseSensitive) { searchOptions = Qt::CaseSensitive; } QMessageIdList result; foreach (QMessageId id, ids) { QMessage message(id); QMessageContentContainer bodyContainer(message.find(message.bodyId())); if (bodyContainer.textContent().contains(body, searchOptions)) { result.append(id); if (limit && ((uint)result.count() >= offset + limit)) { break; } } }
QMessageIdList QMessageStore::queryMessages(const QMessageFilter &filter, const QMessageSortOrder &sortOrder, uint limit, uint offset) const { if (filter.matchFlags() != 0) { d_ptr->_error = QMessageManager::NotYetImplemented; return QMessageIdList(); } d_ptr->_error = QMessageManager::NoError; return convert(d_ptr->_store->queryMessages(convert(filter), convert(sortOrder), limit, offset)); }