[Libreoffice-commits] online.git: loolwsd/ChildProcessSession.cpp loolwsd/LOOLProtocol.hpp loolwsd/MasterProcessSession.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Sun Apr 10 03:35:27 UTC 2016


 loolwsd/ChildProcessSession.cpp  |    8 ++++++--
 loolwsd/LOOLProtocol.hpp         |   11 +++++++++--
 loolwsd/MasterProcessSession.cpp |   10 +++++++---
 3 files changed, 22 insertions(+), 7 deletions(-)

New commits:
commit 8c1e5057fd475596a80e1184b50c923d974bf4ce
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sat Apr 9 23:16:09 2016 -0400

    loolwsd: last activity time updates ignores non-interactive commands
    
    Change-Id: I763c2945f6acb30bea9d04d91982e9fb0c8ca6ca
    Reviewed-on: https://gerrit.libreoffice.org/23950
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/ChildProcessSession.cpp b/loolwsd/ChildProcessSession.cpp
index 62d64ab..912955e 100644
--- a/loolwsd/ChildProcessSession.cpp
+++ b/loolwsd/ChildProcessSession.cpp
@@ -333,11 +333,15 @@ bool ChildProcessSession::_handleInput(const char *buffer, int length)
         //TODO: Sync cursor.
     }
 
-    updateLastActivityTime();
-
     const std::string firstLine = getFirstLine(buffer, length);
     StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
 
+    if (LOOLProtocol::tokenIndicatesUserInteraction(tokens[0]))
+    {
+        // Keep track of timestamps of incoming client messages that indicate user activity.
+        updateLastActivityTime();
+    }
+
     if (tokens[0] == "dummymsg")
     {
         // Just to update the activity of view-only mode
diff --git a/loolwsd/LOOLProtocol.hpp b/loolwsd/LOOLProtocol.hpp
index f482041..0e7a541 100644
--- a/loolwsd/LOOLProtocol.hpp
+++ b/loolwsd/LOOLProtocol.hpp
@@ -63,11 +63,18 @@ namespace LOOLProtocol
         return getFirstToken(message.data(), message.size());
     }
 
+    /// Returns true if the token is a user-interaction token.
+    /// Currently this excludes commands sent automatically.
+    /// Notice that this doesn't guarantee editing activity,
+    /// rather just user interaction with the UI.
     inline
     bool tokenIndicatesUserInteraction(const std::string& token)
     {
-        return (token != "tile" &&
-                token != "status");
+        // Exclude tokens that include these keywords,
+        // such as canceltiles statusindicator.
+        return (token.find("tile") == std::string::npos &&
+                token.find("status") == std::string::npos &&
+                token.find("state") == std::string::npos);
     }
 
     /// Returns the first line of a message.
diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp
index 4fc5ecf..f9ad626 100644
--- a/loolwsd/MasterProcessSession.cpp
+++ b/loolwsd/MasterProcessSession.cpp
@@ -103,12 +103,16 @@ bool MasterProcessSession::handleDisconnect(Poco::StringTokenizer& tokens)
 
 bool MasterProcessSession::_handleInput(const char *buffer, int length)
 {
-    updateLastActivityTime();
-
     const std::string firstLine = getFirstLine(buffer, length);
     StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
     Log::trace(getName() + ": handling [" + firstLine + "].");
 
+    if (LOOLProtocol::tokenIndicatesUserInteraction(tokens[0]))
+    {
+        // Keep track of timestamps of incoming client messages that indicate user activity.
+        updateLastActivityTime();
+    }
+
     if (tokens[0] == "loolclient")
     {
         const auto versionTuple = ParseVersion(tokens[1]);
@@ -141,7 +145,7 @@ bool MasterProcessSession::_handleInput(const char *buffer, int length)
             if (tokens[0] == "unocommandresult:")
             {
                 const std::string stringMsg(buffer, length);
-                Log::info(getName() +"Command: " + stringMsg);
+                Log::info(getName() + "Command: " + stringMsg);
                 const auto index = stringMsg.find_first_of("{");
                 if (index != std::string::npos)
                 {


More information about the Libreoffice-commits mailing list