From 1978a346fdd672cbff50c10a9d22c3ee9f56cbaa Mon Sep 17 00:00:00 2001
From: Armin Felder <armin.felder@osalliance.com>
Date: Fri, 1 Jun 2018 00:15:19 +0200
Subject: [PATCH] fixed racecondition, where server version is not available
 before sending subscriptions

---
 rocketchatserver.cpp       |  3 +++
 rocketchatserverconfig.cpp | 18 +++++++++++++++++-
 rocketchatserverconfig.h   |  1 +
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp
index 58decd6..567d7d0 100755
--- a/rocketchatserver.cpp
+++ b/rocketchatserver.cpp
@@ -70,6 +70,8 @@ void RocketChatServerData::init()
 
     mChannels = new ChannelRepository( channelsModel, channelsModel, groupsModel, mMessagesModel );
 
+    RocketChatServerConfig::init();
+
     QMetaObject::invokeMethod( mRestApi, "init" );
 
     connect( mDdpApi, &MeteorDDP::messageReceived, this, &RocketChatServerData::onDDPMessageReceived, Qt::UniqueConnection );
@@ -1741,6 +1743,7 @@ void RocketChatServerData::getServerInfo()
                 std::get<0>( RocketChatServerConfig::serverVersion ) = verParts[0].toInt();
                 std::get<1>( RocketChatServerConfig::serverVersion ) = verParts[1].toInt();
                 std::get<2>( RocketChatServerConfig::serverVersion ) = verParts[2].toInt();
+                mStorage->setSetting( "serverversion", version );
             }
         }
     };
diff --git a/rocketchatserverconfig.cpp b/rocketchatserverconfig.cpp
index 2790381..97127a0 100644
--- a/rocketchatserverconfig.cpp
+++ b/rocketchatserverconfig.cpp
@@ -18,7 +18,7 @@
  *                                                                                          *
  ********************************************************************************************/
 
-
+#include "persistancelayer.h"
 #include "rocketchatserverconfig.h"
 
 std::tuple<int, int, int> RocketChatServerConfig::serverVersion = std::make_tuple( -1, -1, -1 );
@@ -30,3 +30,19 @@ RocketChatServerConfig::RocketChatServerConfig()
 {
 
 }
+
+void RocketChatServerConfig::init()
+{
+    PersistanceLayer *mStorage = PersistanceLayer::instance();
+    QString serverVersion = mStorage->getSetting( "serverversion" );
+
+    if ( !serverVersion.isEmpty() ) {
+        QStringList verParts = serverVersion.split( "," );
+
+        if ( verParts.length() > 2 ) {
+            std::get<0>( RocketChatServerConfig::serverVersion ) = verParts[0].toInt();
+            std::get<1>( RocketChatServerConfig::serverVersion ) = verParts[1].toInt();
+            std::get<2>( RocketChatServerConfig::serverVersion ) = verParts[2].toInt();
+        }
+    }
+}
diff --git a/rocketchatserverconfig.h b/rocketchatserverconfig.h
index 2dd65a7..8ca41f6 100644
--- a/rocketchatserverconfig.h
+++ b/rocketchatserverconfig.h
@@ -28,6 +28,7 @@ class RocketChatServerConfig
 {
     public:
         RocketChatServerConfig();
+        static void init();
         static QString uniqueId;
         static QString jitsiMeetUrl;
         static QString jitsiMeetPrefix;
-- 
GitLab