From ae7dbf2bda131fada11f1251dbedff1ed7129144 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 7 May 2018 10:17:06 +0200 Subject: Filter by sender --- common/mailpreprocessor.cpp | 19 +++++++++++---- tests/querytest.cpp | 57 +++++++++++++++++++++++++++++++++------------ 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/common/mailpreprocessor.cpp b/common/mailpreprocessor.cpp index 58cb15b..9efa5c9 100644 --- a/common/mailpreprocessor.cpp +++ b/common/mailpreprocessor.cpp @@ -133,10 +133,21 @@ void MailPropertyExtractor::updatedIndexedProperties(Sink::ApplicationDomain::Ma } else { contentToIndex << processPart(msg.data()); } - contentToIndex.append({{}, msg->from(true)->asUnicodeString()}); - contentToIndex.append({{}, msg->to(true)->asUnicodeString()}); - contentToIndex.append({{}, msg->cc(true)->asUnicodeString()}); - contentToIndex.append({{}, msg->bcc(true)->asUnicodeString()}); + const auto sender = mail.getSender(); + contentToIndex.append({{}, sender.name}); + contentToIndex.append({{}, sender.emailAddress}); + for (const auto &c : mail.getTo()) { + contentToIndex.append({{}, c.name}); + contentToIndex.append({{}, c.emailAddress}); + } + for (const auto &c : mail.getCc()) { + contentToIndex.append({{}, c.name}); + contentToIndex.append({{}, c.emailAddress}); + } + for (const auto &c : mail.getBcc()) { + contentToIndex.append({{}, c.name}); + contentToIndex.append({{}, c.emailAddress}); + } //Prepare content for indexing; mail.setProperty("index", QVariant::fromValue(contentToIndex)); diff --git a/tests/querytest.cpp b/tests/querytest.cpp index 81b7cdc..a36dd5e 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp @@ -1346,11 +1346,11 @@ private slots: auto msg = KMime::Message::Ptr::create(); msg->subject()->from7BitString("Subject To Search"); msg->setBody("This is the searchable body."); + msg->from()->from7BitString("\"The Sender\""); msg->assemble(); { Mail mail("sink.dummy.instance1"); mail.setExtractedMessageId("test1"); - mail.setExtractedSubject("Subject To Search"); mail.setFolder("folder1"); mail.setMimeMessage(msg->encodedContent()); VERIFYEXEC(Sink::Store::create(mail)); @@ -1378,52 +1378,79 @@ private slots: Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 1); + QCOMPARE(Sink::Store::read(query).size(), 1); } + //Case-insensitive { Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("Search"), QueryBase::Comparator::Fulltext)); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 1); + QCOMPARE(Sink::Store::read(query).size(), 1); } + //Case-insensitive { Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("search"), QueryBase::Comparator::Fulltext)); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 1); + QCOMPARE(Sink::Store::read(query).size(), 1); } + //Wildcard match { Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("sear*"), QueryBase::Comparator::Fulltext)); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 1); + QCOMPARE(Sink::Store::read(query).size(), 1); } + //Filter by body { Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("searchable"), QueryBase::Comparator::Fulltext)); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 1); + QCOMPARE(Sink::Store::read(query).size(), 1); } + //Filter by folder { Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); query.filter("folder1"); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 1); + QCOMPARE(Sink::Store::read(query).size(), 1); } + //Filter by folder { Sink::Query query; query.resourceFilter("sink.dummy.instance1"); query.filter(QueryBase::Comparator(QString("Subject"), QueryBase::Comparator::Fulltext)); query.filter("folder2"); - auto result = Sink::Store::read(query); - QCOMPARE(result.size(), 0); + QCOMPARE(Sink::Store::read(query).size(), 0); + } + //Filter by sender + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter({}, Sink::QueryBase::Comparator(QString("sender"), Sink::QueryBase::Comparator::Fulltext)); + QCOMPARE(Sink::Store::read(query).size(), 1); + } + //Filter by sender + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter({}, Sink::QueryBase::Comparator(QString("Sender"), Sink::QueryBase::Comparator::Fulltext)); + QCOMPARE(Sink::Store::read(query).size(), 1); + } + //Filter by sender + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter({}, Sink::QueryBase::Comparator(QString("sender@example"), Sink::QueryBase::Comparator::Fulltext)); + QCOMPARE(Sink::Store::read(query).size(), 1); + } + //Filter by sender + { + Sink::Query query; + query.resourceFilter("sink.dummy.instance1"); + query.filter({}, Sink::QueryBase::Comparator(QString("The Sender"), Sink::QueryBase::Comparator::Fulltext)); + QCOMPARE(Sink::Store::read(query).size(), 1); } } -- cgit v1.2.3