[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim/KDE/4.14] libkdepim/addressline: Fix Bug 336163 - autocompletion shows multiple entries for
From: Montel Laurent <montel () kde ! org>
Date: 2015-02-04 8:34:32
Message-ID: E1YIvPs-0003Z3-9k () scm ! kde ! org
[Download RAW message or body]
Git commit 84a0945c2e0c00de317de50e7f0c9e0156d08071 by Montel Laurent.
Committed on 04/02/2015 at 08:33.
Pushed by mlaurent into branch 'KDE/4.14'.
Fix Bug 336163 - autocompletion shows multiple entries for one contact with different \
quotes
Adapt patch from Sandro Knauß to new baloocompletionemail class
+ unittest
etc.
BUG: 336163
FIXED-IN: 14.12.3
M +1 -1 libkdepim/addressline/autotests/CMakeLists.txt
M +10 -0 libkdepim/addressline/autotests/baloocompletionemailtest.cpp
M +1 -0 libkdepim/addressline/autotests/baloocompletionemailtest.h
M +40 -3 libkdepim/addressline/baloocompletionemail.cpp
M +2 -1 libkdepim/addressline/baloocompletionemail.h
http://commits.kde.org/kdepim/84a0945c2e0c00de317de50e7f0c9e0156d08071
diff --git a/libkdepim/addressline/autotests/CMakeLists.txt \
b/libkdepim/addressline/autotests/CMakeLists.txt index de9a0ca..14eb76e 100644
--- a/libkdepim/addressline/autotests/CMakeLists.txt
+++ b/libkdepim/addressline/autotests/CMakeLists.txt
@@ -6,5 +6,5 @@ include_directories(
set( libkdepim_baloocompletionemailtest_SRCS baloocompletionemailtest.cpp \
../baloocompletionemail.cpp) kde4_add_unit_test( libkdepim_baloocompletionemailtest \
${libkdepim_baloocompletionemailtest_SRCS})
-target_link_libraries( libkdepim_baloocompletionemailtest ${QT_QTTEST_LIBRARY} \
${KDE4_KDEUI_LIBS}) +target_link_libraries( libkdepim_baloocompletionemailtest \
${QT_QTTEST_LIBRARY} ${KDE4_KDEUI_LIBS} ${KDEPIMLIBS_KPIMUTILS_LIBS})
diff --git a/libkdepim/addressline/autotests/baloocompletionemailtest.cpp \
b/libkdepim/addressline/autotests/baloocompletionemailtest.cpp index 95c00e3..bc7aa9b \
100644
--- a/libkdepim/addressline/autotests/baloocompletionemailtest.cpp
+++ b/libkdepim/addressline/autotests/baloocompletionemailtest.cpp
@@ -160,7 +160,17 @@ void \
BalooCompletionEmailTest::shouldDontDuplicateEmailWhenUseCase() caseEmailList << \
QLatin1String("FOo3"); completion.setEmailList((QStringList() << \
emailList<<caseEmailList)); QCOMPARE(completion.cleanupEmailList(), emailList);
+}
+void BalooCompletionEmailTest::shouldExcludeDuplicateEntryWithDisplayName()
+{
+ KPIM::BalooCompletionEmail completion;
+ QStringList emailList;
+ emailList << QLatin1String("John Doe <doe@example.com>");
+ emailList << QLatin1String("\"John Doe\" <doe@example.com>");
+ emailList << QLatin1String("\"\'John Doe\'\" <doe@example.com>");
+ completion.setEmailList(emailList);
+ QCOMPARE(completion.cleanupEmailList().count(), 1);
}
QTEST_KDEMAIN(BalooCompletionEmailTest, NoGUI)
diff --git a/libkdepim/addressline/autotests/baloocompletionemailtest.h \
b/libkdepim/addressline/autotests/baloocompletionemailtest.h index f49fd25..2e456a7 \
100644
--- a/libkdepim/addressline/autotests/baloocompletionemailtest.h
+++ b/libkdepim/addressline/autotests/baloocompletionemailtest.h
@@ -39,6 +39,7 @@ private Q_SLOTS:
void shouldExcludeDomain();
void shouldReturnEmailListWhenDomainListIsNotNull();
void shouldDontDuplicateEmailWhenUseCase();
+ void shouldExcludeDuplicateEntryWithDisplayName();
};
#endif // BALOOCOMPLETIONEMAILTEST_H
diff --git a/libkdepim/addressline/baloocompletionemail.cpp \
b/libkdepim/addressline/baloocompletionemail.cpp index e922863..df81099 100644
--- a/libkdepim/addressline/baloocompletionemail.cpp
+++ b/libkdepim/addressline/baloocompletionemail.cpp
@@ -20,6 +20,7 @@
#include "baloocompletionemail.h"
#include <QMap>
+#include <KPIMUtils/Email>
#include <QDebug>
using namespace KPIM;
@@ -43,17 +44,22 @@ void BalooCompletionEmail::setBlackList(const QStringList &lst)
mBlackList = lst;
}
-QStringList BalooCompletionEmail::cleanupEmailList() const
+QStringList BalooCompletionEmail::cleanupEmailList()
{
if (mListEmail.isEmpty())
return mListEmail;
QMap<QString, QString> hashEmail;
- Q_FOREACH (const QString &email, mListEmail) {
+ Q_FOREACH (QString email, mListEmail) {
if (!mBlackList.contains(email)) {
+ QString address;
+ email = stripEmail(email, address);
+ if (address.isEmpty()) {
+ address = email;
+ }
bool excludeMail = false;
Q_FOREACH(const QString &excludeDomain, mExcludeDomain) {
if (!excludeDomain.isEmpty()) {
- if (email.endsWith(excludeDomain)) {
+ if (address.endsWith(excludeDomain)) {
excludeMail = true;
continue;
}
@@ -66,3 +72,34 @@ QStringList BalooCompletionEmail::cleanupEmailList() const
}
return hashEmail.values();
}
+
+
+/* stips the name of an email address email
+ *
+ * 'a' <a@example.com> -> a <a@example.com>
+ * "a" <a@example.com> -> a <a@example.com>
+ * "\"'a'\"" <a@example.com> -> a <a@example.com>
+ *
+ * but "\"'a" <a@example.com> -> "\"'a" <a@example.com>
+ * cause the start and end is not the same.
+ */
+QString BalooCompletionEmail::stripEmail(const QString &email, QString &address)
+{
+ QString displayName, addrSpec, comment;
+ if ( KPIMUtils::AddressOk == KPIMUtils::splitAddress( email, displayName, \
addrSpec, comment )) { + address = addrSpec;
+ while ((displayName.startsWith(QLatin1Char('\'')) && \
displayName.endsWith(QLatin1Char('\''))) || + \
(displayName.startsWith(QLatin1Char('"')) && displayName.endsWith(QLatin1Char('"'))) \
|| + (displayName.startsWith(QLatin1String("\\\"")) && \
displayName.endsWith(QLatin1String("\\\""))) ) { + if \
(displayName.startsWith(QLatin1String("\\\""))) { + displayName = \
displayName.mid(2, displayName.length()-4).trimmed(); + } else {
+ displayName = displayName.mid(1, displayName.length()-2).trimmed();
+ }
+ }
+ return KPIMUtils::normalizedAddress(displayName, addrSpec, comment);
+ } else {
+ return email;
+ }
+}
+
diff --git a/libkdepim/addressline/baloocompletionemail.h \
b/libkdepim/addressline/baloocompletionemail.h index c4bde3b..786a952 100644
--- a/libkdepim/addressline/baloocompletionemail.h
+++ b/libkdepim/addressline/baloocompletionemail.h
@@ -32,8 +32,9 @@ public:
void setBlackList(const QStringList &lst);
- QStringList cleanupEmailList() const;
+ QStringList cleanupEmailList();
private:
+ QString stripEmail(const QString &email, QString &address);
QStringList mListEmail;
QStringList mExcludeDomain;
QStringList mBlackList;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic