summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/ChatPage.cpp22
-rw-r--r--src/ChatPage.h7
2 files changed, 26 insertions, 3 deletions
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index b756f486..a75b7ef5 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -844,7 +844,10 @@ ChatPage::handleSyncResponse(const mtx::responses::Sync &res, const std::string
         nhlog::db()->error("saving sync response: {}", e.what());
     }
 
-    emit trySyncCb();
+    if (shouldThrottleSync())
+        QTimer::singleShot(1000, this, &ChatPage::trySyncCb);
+    else
+        emit trySyncCb();
 }
 
 void
@@ -1161,6 +1164,20 @@ ChatPage::setStatus(const QString &status)
       });
 }
 
+bool
+ChatPage::shouldBeUnavailable() const
+{
+    return lastWindowActive.isValid() &&
+           lastWindowActive.addSecs(60 * 5) < QDateTime::currentDateTime();
+}
+
+bool
+ChatPage::shouldThrottleSync() const
+{
+    return lastWindowActive.isValid() &&
+           lastWindowActive.addSecs(6 * 5) < QDateTime::currentDateTime();
+}
+
 mtx::presence::PresenceState
 ChatPage::currentPresence() const
 {
@@ -1172,8 +1189,7 @@ ChatPage::currentPresence() const
     case UserSettings::Presence::Offline:
         return mtx::presence::offline;
     case UserSettings::Presence::AutomaticPresence:
-        if (lastWindowActive.isValid() &&
-            lastWindowActive.addSecs(60 * 5) < QDateTime::currentDateTime())
+        if (shouldBeUnavailable())
             return mtx::presence::unavailable;
         else
             return mtx::presence::online;
diff --git a/src/ChatPage.h b/src/ChatPage.h
index 13621b23..910ccd1e 100644
--- a/src/ChatPage.h
+++ b/src/ChatPage.h
@@ -203,6 +203,13 @@ private:
     void loadStateFromCache();
     void resetUI();
 
+    // returns if the user had no interaction with Nheko for quite a while, which means we set our
+    // presence to unavailable if automatic presence is enabled
+    bool shouldBeUnavailable() const;
+    // If we should throttle sync processing to reduce CPU load, if people are spamming messages and
+    // we aren't looking
+    bool shouldThrottleSync() const;
+
     template<class Collection>
     Memberships getMemberships(const std::vector<Collection> &events) const;