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