summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2022-12-19 05:19:22 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2022-12-19 05:19:22 +0100
commitd4336b56d6ec9a01936dbf3b7b22e49fd1ef1a4f (patch)
tree623f58e76ba6fa0dc90c607d82c7a8fd6cd70c33 /src
parentFix searching more past again (diff)
downloadnheko-d4336b56d6ec9a01936dbf3b7b22e49fd1ef1a4f.tar.xz
Make unfiltered messages hidden by default
Diffstat (limited to 'src')
-rw-r--r--src/timeline/TimelineFilter.cpp42
1 files changed, 25 insertions, 17 deletions
diff --git a/src/timeline/TimelineFilter.cpp b/src/timeline/TimelineFilter.cpp
index 891f87f4..7dc4c7aa 100644
--- a/src/timeline/TimelineFilter.cpp
+++ b/src/timeline/TimelineFilter.cpp
@@ -39,6 +39,8 @@ void
 TimelineFilter::startFiltering()
 {
     incrementalSearchIndex = 0;
+    invalidateFilter();
+
     continueFiltering();
 }
 
@@ -61,20 +63,25 @@ bool
 TimelineFilter::event(QEvent *ev)
 {
     if (ev->type() == getFilterEventType()) {
-        // process the next 30 events by claiming their "filterrole" data has changed.
-        int orgIndex = incrementalSearchIndex;
-        incrementalSearchIndex += 30;
-
-        if (auto s = source(); s) {
-            auto count = s->rowCount();
-            if (incrementalSearchIndex >= count) {
-                incrementalSearchIndex = std::numeric_limits<int>::max();
+        if (incrementalSearchIndex < std::numeric_limits<int>::max()) {
+            int orgIndex = incrementalSearchIndex;
+            // process the next 100 events by claiming their "filterrole" data has changed.
+            incrementalSearchIndex += 100;
+
+            if (auto s = source(); s) {
+                auto count = s->rowCount();
+                if (incrementalSearchIndex >= count) {
+                    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;
     }
@@ -113,11 +120,11 @@ TimelineFilter::fetchAgain()
     if (threadId.isEmpty() && contentFilter.isEmpty())
         return;
 
-    if (auto s = source()) {
-        if (rowCount() == cachedCount && s->canFetchMore(QModelIndex()))
+    if (auto s = source(); s && incrementalSearchIndex == std::numeric_limits<int>::max()) {
+        if (this->rowCount() == cachedCount && s->canFetchMore(QModelIndex()))
             s->fetchMore(QModelIndex());
         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.
         incrementalSearchIndex = 0;
+
         emit sourceChanged();
         invalidateFilter();
     }
@@ -197,7 +205,7 @@ TimelineFilter::filterAcceptsRow(int source_row, const QModelIndex &) const
 {
     // this chunk is still unfiltered.
     if (source_row > incrementalSearchIndex)
-        return true;
+        return false;
 
     if (threadId.isEmpty() && contentFilter.isEmpty())
         return true;