From 192cb00abb964a07df2403513f527598b6791df2 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 15 Jun 2017 10:06:28 +0200 Subject: No more threading by subject It seems to do more harm than good, creating huge threads, and the webclient doesn't do it either. --- common/mail/threadindexer.cpp | 74 ++----------------------------------------- 1 file changed, 2 insertions(+), 72 deletions(-) (limited to 'common/mail') diff --git a/common/mail/threadindexer.cpp b/common/mail/threadindexer.cpp index 473f28e..ea2cf71 100644 --- a/common/mail/threadindexer.cpp +++ b/common/mail/threadindexer.cpp @@ -24,69 +24,12 @@ using namespace Sink; using namespace Sink::ApplicationDomain; -static QString stripOffPrefixes(const QString &subject) -{ - //TODO this hardcoded list is probably not good enough (especially regarding internationalization) - //TODO this whole routine, including internationalized re/fwd ... should go into some library. - //We'll require the same for generating reply/forward subjects in kube - static QStringList defaultReplyPrefixes = QStringList() << QLatin1String("Re\\s*:") - << QLatin1String("Re\\[\\d+\\]:") - << QLatin1String("Re\\d+:"); - - static QStringList defaultForwardPrefixes = QStringList() << QLatin1String("Fwd:") - << QLatin1String("FW:"); - - QStringList replyPrefixes; // = GlobalSettings::self()->replyPrefixes(); - if (replyPrefixes.isEmpty()) { - replyPrefixes = defaultReplyPrefixes; - } - - QStringList forwardPrefixes; // = GlobalSettings::self()->forwardPrefixes(); - if (forwardPrefixes.isEmpty()) { - forwardPrefixes = defaultReplyPrefixes; - } - - const QStringList prefixRegExps = replyPrefixes + forwardPrefixes; - - // construct a big regexp that - // 1. is anchored to the beginning of str (sans whitespace) - // 2. matches at least one of the part regexps in prefixRegExps - const QString bigRegExp = QString::fromLatin1("^(?:\\s+|(?:%1))+\\s*").arg(prefixRegExps.join(QLatin1String(")|(?:"))); - - static QString regExpPattern; - static QRegExp regExp; - - regExp.setCaseSensitivity(Qt::CaseInsensitive); - if (regExpPattern != bigRegExp) { - // the prefixes have changed, so update the regexp - regExpPattern = bigRegExp; - regExp.setPattern(regExpPattern); - } - - if(regExp.isValid()) { - QString tmp = subject; - if (regExp.indexIn( tmp ) == 0) { - return tmp.remove(0, regExp.matchedLength()); - } - } else { - SinkWarning() << "bigRegExp = \"" - << bigRegExp << "\"\n" - << "prefix regexp is invalid!"; - } - - return subject; -} - - void ThreadIndexer::updateThreadingIndex(const QByteArray &identifier, const ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction) { auto messageId = entity.getProperty(Mail::MessageId::name); auto parentMessageId = entity.getProperty(Mail::ParentMessageId::name); - const auto subject = entity.getProperty(Mail::Subject::name); - const auto normalizedSubject = stripOffPrefixes(subject.toString()).toUtf8(); if (messageId.toByteArray().isEmpty()) { SinkWarning() << "Found an email without messageId. This is illegal and threading will break. Entity id: " << identifier; - SinkWarning() << "Subject: " << subject; } QVector thread; @@ -99,18 +42,9 @@ void ThreadIndexer::updateThreadingIndex(const QByteArray &identifier, const App thread = index().secondaryLookup(parentMessageId); SinkTrace() << "Found parent: " << thread; } - if (thread.isEmpty()) { - //Try to lookup the thread by subject if not empty - if ( !normalizedSubject.isEmpty()) { - thread = index().secondaryLookup(normalizedSubject); - } - if (thread.isEmpty()) { - thread << QUuid::createUuid().toByteArray(); - SinkTrace() << "Created a new thread: " << thread; - } else { - SinkTrace() << "Found thread by subject: " << thread; - } + thread << QUuid::createUuid().toByteArray(); + SinkTrace() << "Created a new thread: " << thread; } Q_ASSERT(!thread.isEmpty()); @@ -122,9 +56,6 @@ void ThreadIndexer::updateThreadingIndex(const QByteArray &identifier, const App } index().index(messageId, thread.first(), transaction); index().index(thread.first(), messageId, transaction); - if (!normalizedSubject.isEmpty()) { - index().index(normalizedSubject, thread.first(), transaction); - } } @@ -146,7 +77,6 @@ void ThreadIndexer::remove(const ApplicationDomain::ApplicationDomainType &entit QMap ThreadIndexer::databases() { return {{"mail.index.messageIdthreadId", 1}, - {"mail.index.subjectthreadId", 1}, {"mail.index.threadIdmessageId", 1}}; } -- cgit v1.2.3