Make unfiltered messages hidden by default

This commit is contained in:
Nicolas Werner 2022-12-19 05:19:22 +01:00
parent 0597041d8e
commit d4336b56d6
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
1 changed files with 24 additions and 16 deletions

View File

@ -39,6 +39,8 @@ void
TimelineFilter::startFiltering() TimelineFilter::startFiltering()
{ {
incrementalSearchIndex = 0; incrementalSearchIndex = 0;
invalidateFilter();
continueFiltering(); continueFiltering();
} }
@ -61,20 +63,25 @@ bool
TimelineFilter::event(QEvent *ev) TimelineFilter::event(QEvent *ev)
{ {
if (ev->type() == getFilterEventType()) { if (ev->type() == getFilterEventType()) {
// process the next 30 events by claiming their "filterrole" data has changed. if (incrementalSearchIndex < std::numeric_limits<int>::max()) {
int orgIndex = incrementalSearchIndex; int orgIndex = incrementalSearchIndex;
incrementalSearchIndex += 30; // process the next 100 events by claiming their "filterrole" data has changed.
incrementalSearchIndex += 100;
if (auto s = source(); s) { if (auto s = source(); s) {
auto count = s->rowCount(); auto count = s->rowCount();
if (incrementalSearchIndex >= count) { if (incrementalSearchIndex >= count) {
incrementalSearchIndex = std::numeric_limits<int>::max(); incrementalSearchIndex = std::numeric_limits<int>::max();
}
nhlog::ui()->debug("Filter progress {}/{}", incrementalSearchIndex, count);
s->dataChanged(s->index(orgIndex),
s->index(std::min(incrementalSearchIndex, count - 1)),
{FilterRole});
if (incrementalSearchIndex < count && incrementalSearchIndex > 0) {
continueFiltering();
}
} }
nhlog::ui()->debug("Filter progress {}/{}", incrementalSearchIndex, count);
s->dataChanged(s->index(orgIndex),
s->index(std::min(incrementalSearchIndex, count - 1)),
{FilterRole});
continueFiltering();
} }
return true; return true;
} }
@ -113,11 +120,11 @@ TimelineFilter::fetchAgain()
if (threadId.isEmpty() && contentFilter.isEmpty()) if (threadId.isEmpty() && contentFilter.isEmpty())
return; return;
if (auto s = source()) { if (auto s = source(); s && incrementalSearchIndex == std::numeric_limits<int>::max()) {
if (rowCount() == cachedCount && s->canFetchMore(QModelIndex())) if (this->rowCount() == cachedCount && s->canFetchMore(QModelIndex()))
s->fetchMore(QModelIndex()); s->fetchMore(QModelIndex());
else else
cachedCount = rowCount(); cachedCount = this->rowCount();
} }
} }
@ -163,6 +170,7 @@ TimelineFilter::setSource(TimelineModel *s)
// reset the search index a second time just to be safe. // reset the search index a second time just to be safe.
incrementalSearchIndex = 0; incrementalSearchIndex = 0;
emit sourceChanged(); emit sourceChanged();
invalidateFilter(); invalidateFilter();
} }
@ -197,7 +205,7 @@ TimelineFilter::filterAcceptsRow(int source_row, const QModelIndex &) const
{ {
// this chunk is still unfiltered. // this chunk is still unfiltered.
if (source_row > incrementalSearchIndex) if (source_row > incrementalSearchIndex)
return true; return false;
if (threadId.isEmpty() && contentFilter.isEmpty()) if (threadId.isEmpty() && contentFilter.isEmpty())
return true; return true;