diff --git a/rocketchat.cpp b/rocketchat.cpp index 9f2d3eec2b877b314b924f39b62eb11a1ca50d47..a1e6283553c7dda8807fac42e12a7b68767c8ebe 100755 --- a/rocketchat.cpp +++ b/rocketchat.cpp @@ -301,6 +301,11 @@ void RocketChat::deleteMessage(QString rid, QString id) QMetaObject::invokeMethod( mServerMap.first(), "deleteMessage", Q_ARG( QString, rid ),Q_ARG( QString, id ) ); } +void RocketChat::resetConnection(void) +{ + QMetaObject::invokeMethod( mServerMap.first(), "reconnect" ); +} + bool RocketChat::newServerByDomain( const QString &domain, bool pUnsecure = false ) { newServerMutex.lock(); @@ -724,7 +729,7 @@ void RocketChat::serverReadySlot() connect( pServer, &RocketChatServerData::newLoginMethod, this, &RocketChat::addLoginMethod, Qt::UniqueConnection ); connect( pServer, &RocketChatServerData::resetLoginMethods, this, &RocketChat::resetLoginMethods, Qt::UniqueConnection ); connect( pServer, &RocketChatServerData::offlineMode, this, &RocketChat::offlineMode, Qt::UniqueConnection ); - + connect( pServer, &RocketChatServerData::offline, this, &RocketChat::offline, Qt::UniqueConnection ); connect( pServer, &RocketChatServerData::loggingIn, this, &RocketChat::loggingIn, Qt::UniqueConnection ); connect( pServer, &RocketChatServerData::userStatusChanged, [ = ]( int pStatus ) { diff --git a/rocketchat.h b/rocketchat.h index c22d0ddbfbec6621054eb76899d1be5c13713926..0019960a2cb89b15a763808373ddbfd6961914c4 100755 --- a/rocketchat.h +++ b/rocketchat.h @@ -139,6 +139,7 @@ class RocketChat : public QObject Q_INVOKABLE void clearWebViewCookies(); Q_INVOKABLE void deleteMessage(QString rid,QString id); + Q_INVOKABLE void resetConnection(void); void registerServer( RocketChatServerData *pServer ); diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp index da76258007fca7819cf3d534adb555a49541cd4c..463d00be94b13f62bf85f3f125dac7b72d32aaa7 100755 --- a/rocketchatserver.cpp +++ b/rocketchatserver.cpp @@ -506,6 +506,7 @@ void RocketChatServerData::setUserId( const QString &userId ) void RocketChatServerData::disconnectFromServer() { mConnectionState = ConnectionState::OFFLINE; + emit offline(); mDdpApi->disconnectFromServer(); } @@ -617,6 +618,12 @@ void RocketChatServerData::wipeDbAndReconnect() resume(); } +void RocketChatServerData::reconnect() +{ + disconnectFromServer();; + resume(); +} + void RocketChatServerData::deleteMessage(QString rid, QString id) { QJsonArray params = { QJsonObject({{"_id", id }})}; @@ -980,6 +987,11 @@ void RocketChatServerData::onDDPConnected() mDdpApi->sendRequest( request ); if ( mResumeOperation ) { + auto token = mDdpApi->getToken(); + if(token.isEmpty()){ + auto dbtoken = mStorage->getToken().first; + mDdpApi->setToken(dbtoken); + } loginWithToken( mUsername, mDdpApi->getToken(), true ); } else { QPair<QString, uint> tokenDb = mStorage->getToken(); @@ -1003,6 +1015,7 @@ void RocketChatServerData::onDDPConnected() void RocketChatServerData::onDDPDisonnected() { mConnectionState = ConnectionState::OFFLINE; + emit offline(); } void RocketChatServerData::onDDPAuthenticated() diff --git a/rocketchatserver.h b/rocketchatserver.h index 941da38810f47f2c437ea7f00b771492fe0cd2db..41b9fcac5a4366235427dcc811f3d57be5f20215 100755 --- a/rocketchatserver.h +++ b/rocketchatserver.h @@ -215,7 +215,7 @@ class RocketChatServerData : public MessageListener void getSetting( const QString &pKey ); void deleteMessage(QString rid, QString id); - + void reconnect(); public: QString getServerId() const; @@ -338,6 +338,7 @@ class RocketChatServerData : public MessageListener void userStatusChanged( int status ); void videoPath( const QString &path ); void setting( const QString &pKey, const QString &pValue ); + void offline(void); // MessageListener interface public: