diff --git a/config.h b/config.h index 38783dd841c0d070aa8987e6f385be77de2d7d60..e9187bd7b4a22dd3b95af01cdedab040a26b4b59 100755 --- a/config.h +++ b/config.h @@ -3,4 +3,5 @@ #define DBVERSION 2 + #endif // CONFIG_H diff --git a/ddpRequests/ddpsubscriptionrequest.cpp b/ddpRequests/ddpsubscriptionrequest.cpp index 1d0d7089285ae6c52e86201866e580e7c5ce672f..da6a374a59d9124c47d34868cfde1c692b01f58f 100755 --- a/ddpRequests/ddpsubscriptionrequest.cpp +++ b/ddpRequests/ddpsubscriptionrequest.cpp @@ -21,6 +21,7 @@ #include "ddpsubscriptionrequest.h" +#include "../rocketchatserverconfig.h" DDPSubscriptionRequest::DDPSubscriptionRequest( const QString &pCollection, const QJsonArray &pParams ) { @@ -39,9 +40,24 @@ DDPSubscriptionRequest::DDPSubscriptionRequest() void DDPSubscriptionRequest::buildRequest( const QString &pCollection, const QJsonArray &pParams ) { + QJsonArray params = pParams; + QJsonArray args; + QJsonObject obj; + obj["useCollection"] = false; + obj["args"] = args; + int major = std::get<0>( RocketChatServerConfig::serverVersion ); + int minor = std::get<1>( RocketChatServerConfig::serverVersion ); + int patch = std::get<2>( RocketChatServerConfig::serverVersion ); + + if ( major != -1 && minor != -1 && patch != -1 ) { + if ( major >= 0 && minor > 6 ) { + params.append( obj ); + } + } + QJsonObject request; request["name"] = pCollection; request["msg"] = "sub"; - request["params"] = pParams; + request["params"] = params; mRawRequest = request; } diff --git a/engine.pro b/engine.pro index 2ca379ed4a2f118c7cc4251e9931dc4ea0123242..bdbee04702809ee7c79f531b6609d18cd066515a 100644 --- a/engine.pro +++ b/engine.pro @@ -85,6 +85,7 @@ SOURCES += api/meteorddp.cpp \ CustomModels/loginmethodsmodel.cpp \ repos/loginmethodsrepository.cpp \ repos/entities/loginmethod.cpp \ + restRequests/getserverinforequest.cpp \ ddpRequests/rocketchatblockuserrequest.cpp \ ddpRequests/rocketchatunblockuserrequest.cpp @@ -172,6 +173,7 @@ HEADERS += \ CustomModels/loginmethodsmodel.h \ repos/loginmethodsrepository.h \ repos/entities/loginmethod.h \ + restRequests/getserverinforequest.h \ ddpRequests/rocketchatblockuserrequest.h \ ddpRequests/rocketchatunblockuserrequest.h @@ -264,4 +266,3 @@ CONFIG(release, debug|release) { RESOURCES += \ sql.qrc - diff --git a/restRequests/getserverinforequest.cpp b/restRequests/getserverinforequest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ac6475b028bfdb9a6fb9f4910e36328a72fa248d --- /dev/null +++ b/restRequests/getserverinforequest.cpp @@ -0,0 +1,6 @@ +#include "getserverinforequest.h" + +GetServerInfoRequest::GetServerInfoRequest( const RestRequestCallback &pSuccess, const RestRequestCallback &pError ): GetRequest( RestPaths::apiServerInfo, pSuccess, pError ) +{ + +} diff --git a/restRequests/getserverinforequest.h b/restRequests/getserverinforequest.h new file mode 100644 index 0000000000000000000000000000000000000000..dbabce0b2578ab94a9950b668e3396554435e7ce --- /dev/null +++ b/restRequests/getserverinforequest.h @@ -0,0 +1,13 @@ +#ifndef GETSERVERINFOREQUEST_H +#define GETSERVERINFOREQUEST_H + +#include "getrequest.h" +#include "restpaths.h" + +class GetServerInfoRequest: public GetRequest +{ + public: + GetServerInfoRequest( const RestRequestCallback &pSuccess, const RestRequestCallback &pError ); +}; + +#endif // GETSERVERINFOREQUEST_H diff --git a/restRequests/restpaths.cpp b/restRequests/restpaths.cpp index 08ea3c8a58c57190e81a5ba0d9fe9146812bfd52..f4d707a097ad9f6092610a45f88c62fef7ba9aff 100755 --- a/restRequests/restpaths.cpp +++ b/restRequests/restpaths.cpp @@ -31,3 +31,4 @@ const QString RestPaths::apiRoomMessages = "/channels.history"; const QString RestPaths::apiSendMessage = "/chat.postMessage"; const QString RestPaths::apiJoinedRooms = "/channels.list.joined"; const QString RestPaths::apiJoinedGroups = "/groups.list"; +const QString RestPaths::apiServerInfo = "/info"; diff --git a/restRequests/restpaths.h b/restRequests/restpaths.h index 3a6eece3f72715f88b24940685a739de99cafd14..b82d7f37a58f34af84e3e1df0eeb3e13a565ec7b 100755 --- a/restRequests/restpaths.h +++ b/restRequests/restpaths.h @@ -36,6 +36,7 @@ class RestPaths const static QString apiSendMessage; const static QString apiJoinedRooms; const static QString apiJoinedGroups; + const static QString apiServerInfo; }; #endif // RESTPATHS_H diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp index 6bac9e3aa86afc0ddf90bf7135714e4430105b16..dbff073e0a34c4b9a87a43b4bdcf4ccdcdd32800 100755 --- a/rocketchatserver.cpp +++ b/rocketchatserver.cpp @@ -64,7 +64,6 @@ RocketChatServerData::~RocketChatServerData() { qDebug() << "RocketChatServerData destructor start"; - delete mEmojiService; delete mFileService; qDebug() << "RocketChatServerData destructor end"; @@ -838,6 +837,7 @@ void RocketChatServerData::onDDPAuthenticated() getCustomEmojis(); setUserPresenceStatus( 1 ); mStorage->setSetting( "currentServer", mBaseUrl ); + getServerInfo(); if ( !mCurrentChannel.isEmpty() ) { joinChannel( mCurrentChannel ); @@ -1040,6 +1040,7 @@ void RocketChatServerData::onDDPMessageReceived( const QJsonObject &pMessage ) sendUnsentMessages(); if ( Q_LIKELY( pMessage.contains( "collection" ) ) ) { + if ( pMessage["collection"] == "stream-notify-user" ) { handleChannelMessage( pMessage ); } else if ( pMessage["collection"] == "users" ) { @@ -1242,13 +1243,13 @@ void RocketChatServerData::joinJitsiCall( const QString &pRoomId ) { if ( Q_LIKELY( mChannels->contains( pRoomId ) ) ) { - QString hash = QCryptographicHash::hash( ( config.uniqueId + pRoomId ).toUtf8(), QCryptographicHash::Md5 ).toHex(); + QString hash = QCryptographicHash::hash( ( RocketChatServerConfig::uniqueId + pRoomId ).toUtf8(), QCryptographicHash::Md5 ).toHex(); #if defined(Q_OS_IOS) || defined(Q_OS_ANDROID) QString scheme = "org.jitsi.meet://"; #else QString scheme = "https://"; #endif - QString url = scheme + config.jitsiMeetUrl + "/" + config.jitsiMeetPrefix + hash; + QString url = scheme + RocketChatServerConfig::jitsiMeetUrl + "/" + RocketChatServerConfig::jitsiMeetPrefix + hash; qDebug() << url; emit openUrl( url ); } @@ -1316,15 +1317,15 @@ void RocketChatServerData::getServerSettings() QString value = currentConfObject["value"].toString(); if ( id == "uniqueID" ) { - config.uniqueId = value; + RocketChatServerConfig::uniqueId = value; } if ( id == "Jitsi_Domain" ) { - config.jitsiMeetUrl = value; + RocketChatServerConfig::jitsiMeetUrl = value; } if ( id == "Jitsi_URL_Room_Prefix" ) { - config.jitsiMeetPrefix = value; + RocketChatServerConfig::jitsiMeetPrefix = value; } } @@ -1637,6 +1638,29 @@ void RocketChatServerData::getLoginMethods() mDdpApi->sendRequest( loginMethodsSubscription ); } +void RocketChatServerData::getServerInfo() +{ + RestRequestCallback success = [ = ]( QNetworkReply * pReply, QJsonObject data, RestApi * pApi ) { + Q_UNUSED( pApi ); + Q_UNUSED( pReply ); + qDebug() << data; + + if ( data.contains( "info" ) ) { + QJsonObject info = data["info"].toObject(); + + if ( info.contains( "version" ) ) { + QString version = info["version"].toString(); + QStringList verParts = version.split( "." ); + std::get<0>( RocketChatServerConfig::serverVersion ) = verParts[0].toInt(); + std::get<1>( RocketChatServerConfig::serverVersion ) = verParts[1].toInt(); + std::get<2>( RocketChatServerConfig::serverVersion ) = verParts[2].toInt(); + } + } + }; + QSharedPointer<GetServerInfoRequest> serverInfoRequest( new GetServerInfoRequest( success, nullptr ) ); + mRestApi->sendRequest( serverInfoRequest ); +} + QList<QSharedPointer<RocketChatUser> > RocketChatServerData::getUserOfChannel( const QString &pChannelId ) { QList<QSharedPointer<RocketChatUser>> users; diff --git a/rocketchatserver.h b/rocketchatserver.h index d2a0ced09e465b2206df6f562cf545c1c5bb7ba8..c2bec5c4983c5591887d5471688ba67a217707c9 100755 --- a/rocketchatserver.h +++ b/rocketchatserver.h @@ -67,6 +67,7 @@ #include "ddpRequests/rocketchatunblockuserrequest.h" #include "restRequests/restrequest.h" #include "restRequests/restlogoutrequest.h" +#include "restRequests/getserverinforequest.h" #include "fileuploader.h" #include "notifications/notifications.h" #include "services/rocketchatchannelservice.h" @@ -129,7 +130,7 @@ class RocketChatServerData : public QObject void createChannel( const QString &pChannelName, const QStringList &pUsers, bool pReadonly ); void createPrivateGroup( const QString &pChannelName, const QStringList &pUsers, bool pReadonly ); void addUsersToChannel( const QString &pChannelName, const QStringList &pUsers ); - void sendMessage( const QString &pMessage, const QString &pChannelId ); + void sendMessage( const QString &pChannelId, const QString &pMessage ); void uploadFile( const QString &pChannelId, const QString &pFile ); void cancelUpload( const QString &pFileId ); @@ -153,6 +154,8 @@ class RocketChatServerData : public QObject void getRoomInformation( const QString &pRoomName ); void getLoginMethods(); + void getServerInfo(); + void logout( void ); void setConnectionState( const ConnectionState &pValue ); diff --git a/rocketchatserverconfig.cpp b/rocketchatserverconfig.cpp index 8c2f14a3e171dba84bd49a3b3351bd6a20a69886..2790381c9219752fa0d97978a59da7f7a559406e 100644 --- a/rocketchatserverconfig.cpp +++ b/rocketchatserverconfig.cpp @@ -21,6 +21,11 @@ #include "rocketchatserverconfig.h" +std::tuple<int, int, int> RocketChatServerConfig::serverVersion = std::make_tuple( -1, -1, -1 ); +QString RocketChatServerConfig::uniqueId; +QString RocketChatServerConfig::jitsiMeetUrl; +QString RocketChatServerConfig::jitsiMeetPrefix; + RocketChatServerConfig::RocketChatServerConfig() { diff --git a/rocketchatserverconfig.h b/rocketchatserverconfig.h index 4d932d314ccc2a022040600c78a003a87db6c2ca..2dd65a75e5ae8fcf1388f56fe4c00fd18ba9f4df 100644 --- a/rocketchatserverconfig.h +++ b/rocketchatserverconfig.h @@ -22,14 +22,17 @@ #ifndef ROCKETCHATSERVERCONFIG_H #define ROCKETCHATSERVERCONFIG_H #include <QString> +#include <tuple> class RocketChatServerConfig { public: RocketChatServerConfig(); - QString uniqueId; - QString jitsiMeetUrl; - QString jitsiMeetPrefix; + static QString uniqueId; + static QString jitsiMeetUrl; + static QString jitsiMeetPrefix; + static std::tuple<int, int, int> serverVersion; + }; #endif // ROCKETCHATSERVERCONFIG_H diff --git a/services/messageservice.cpp b/services/messageservice.cpp index b69475eacfe5db70449c60d40a3d62076a06fe62..624b9bf5f8ea3759ff386422625dbc18ec035875 100644 --- a/services/messageservice.cpp +++ b/services/messageservice.cpp @@ -149,6 +149,11 @@ QSharedPointer<RocketChatMessage> MessageService::parseMessage( const QJsonObjec author = userObject["username"].toString(); } + // if alias given, us it instead of the username, required for bridges + if ( Q_LIKELY( pMessageData.contains( "alias" ) ) ) { + author = pMessageData["alias"].toString(); + } + if ( Q_LIKELY( userObject.contains( "_id" ) ) ) { authorId = userObject["_id"].toString(); }