From 1026c329afed70f5ab3b8db32756ea926049dbe9 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 9 Feb 2018 23:41:36 +0100 Subject: Query instead of filtering --- framework/qml/MailListView.qml | 2 ++ framework/src/domain/maillistmodel.cpp | 17 ++++++++++++++++- framework/src/domain/maillistmodel.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/framework/qml/MailListView.qml b/framework/qml/MailListView.qml index 1cdc664f..8fed8c9d 100644 --- a/framework/qml/MailListView.qml +++ b/framework/qml/MailListView.qml @@ -43,6 +43,7 @@ FocusScope { onMessageReceived: { parentFolder = message.folder currentMail = null + filterField.clearSearch() } } @@ -82,6 +83,7 @@ FocusScope { function clearSearch() { filterField.visible = false find.text = "" + mailListModel.filter = "" } RowLayout { diff --git a/framework/src/domain/maillistmodel.cpp b/framework/src/domain/maillistmodel.cpp index 4b70a10a..e3ef04d6 100644 --- a/framework/src/domain/maillistmodel.cpp +++ b/framework/src/domain/maillistmodel.cpp @@ -37,7 +37,21 @@ MailListModel::~MailListModel() void MailListModel::setFilter(const QString &filter) { - setFilterWildcard(filter); + if (filter.length() < 3 && !filter.isEmpty()) { + return; + } + auto oldQuery = mQuery; + auto query = mQuery; + if (!filter.isEmpty()) { + auto f = filter; + if (filter.contains(' ')) { + f = "\"" + filter + "\""; + } + f.append('*'); + query.filter(Sink::QueryBase::Comparator(f, Sink::QueryBase::Comparator::Fulltext)); + } + runQuery(query); + mQuery = oldQuery; } QString MailListModel::filter() const @@ -188,6 +202,7 @@ bool MailListModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar void MailListModel::runQuery(const Sink::Query &query) { + mQuery = query; m_model = Sink::Store::loadModel(query); setSourceModel(m_model.data()); } diff --git a/framework/src/domain/maillistmodel.h b/framework/src/domain/maillistmodel.h index ce0399f7..27e8d036 100644 --- a/framework/src/domain/maillistmodel.h +++ b/framework/src/domain/maillistmodel.h @@ -107,4 +107,5 @@ private: QSet mFetchedMails; QByteArray mCurrentQueryItem; bool mIsThreaded = true; + Sink::Query mQuery; }; -- cgit v1.2.3