From 7004cead71f1ae5f322783638a6c33ca90aee2d6 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 29 Mar 2017 20:21:50 +0200 Subject: Autocomplete from addressbooks --- framework/domain/recepientautocompletionmodel.cpp | 26 ++++++++++++++++++++++- framework/domain/recepientautocompletionmodel.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/framework/domain/recepientautocompletionmodel.cpp b/framework/domain/recepientautocompletionmodel.cpp index 4e5fed95..2f52db07 100644 --- a/framework/domain/recepientautocompletionmodel.cpp +++ b/framework/domain/recepientautocompletionmodel.cpp @@ -24,6 +24,10 @@ #include #include #include +#include +#include + +using namespace Sink::ApplicationDomain; RecipientAutocompletionModel::RecipientAutocompletionModel(QObject *parent) : QSortFilterProxyModel(), @@ -74,6 +78,17 @@ void RecipientAutocompletionModel::load() for (const auto &entry : list) { mSourceModel->appendRow(add(entry)); } + Sink::Query query; + query.request(); + query.request(); + Sink::Store::fetchAll(query) + .then([this] (const QList &list) { + for (const auto &c : list) { + for (const auto &email : c->getEmails()) { + addToModel(email.email, c->getFn()); + } + } + }).exec(); } QHash< int, QByteArray > RecipientAutocompletionModel::roleNames() const @@ -84,7 +99,8 @@ QHash< int, QByteArray > RecipientAutocompletionModel::roleNames() const return roles; } -void RecipientAutocompletionModel::addEntry(const QByteArray &address, const QByteArray &name) + +bool RecipientAutocompletionModel::addToModel(const QString &address, const QString &name) { auto add = [] (const QString &n) { auto item = new QStandardItem{n}; @@ -100,6 +116,14 @@ void RecipientAutocompletionModel::addEntry(const QByteArray &address, const QBy auto matches = mSourceModel->findItems(formattedName); if (matches.isEmpty()) { mSourceModel->appendRow(add(formattedName)); + return true; + } + return false; +} + +void RecipientAutocompletionModel::addEntry(const QByteArray &address, const QByteArray &name) +{ + if (addToModel(address, name)) { mTimer->start(100); } } diff --git a/framework/domain/recepientautocompletionmodel.h b/framework/domain/recepientautocompletionmodel.h index 7e89e513..22c6f108 100644 --- a/framework/domain/recepientautocompletionmodel.h +++ b/framework/domain/recepientautocompletionmodel.h @@ -41,6 +41,7 @@ public: QHash roleNames() const Q_DECL_OVERRIDE; + bool addToModel(const QString &address, const QString &name); void addEntry(const QByteArray &address, const QByteArray &name); void setFilter(const QString &); -- cgit v1.2.3