diff --git a/CustomModels/usermodel.h b/CustomModels/usermodel.h index 4b222980036130b317e11f3ca5f8c3e91cd2663b..0c0da919ad029d726bd09dc6ef0cc8f121cb8249 100644 --- a/CustomModels/usermodel.h +++ b/CustomModels/usermodel.h @@ -31,6 +31,9 @@ #include <QList> #include "repos/entities/rocketchatuser.h" + +typedef QSharedPointer<RocketChatUser> User; + class UserModel: public QAbstractListModel { Q_OBJECT @@ -40,11 +43,13 @@ class UserModel: public QAbstractListModel UserId, name }; + public slots: + bool insertUser( const QString &, const QSharedPointer<RocketChatUser> & ); + public: UserModel( QObject *parent = 0 ); int rowCount( const QModelIndex &parent = QModelIndex() ) const; QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const; - bool insertUser( const QString &, const QSharedPointer<RocketChatUser> & ); QString getCurrent() const; void setCurrent( const QString &value ); void onCurrentChannelChanged( const QString &newText ); diff --git a/repos/entities/rocketchatmessage.cpp b/repos/entities/rocketchatmessage.cpp index a7915bd437e9bd7040acefe4bf1a5eac435f0927..4cd0e50c5c93058791e6f3cca64100686c6cb65a 100755 --- a/repos/entities/rocketchatmessage.cpp +++ b/repos/entities/rocketchatmessage.cpp @@ -180,7 +180,7 @@ QString RocketChatMessage::getAuthorId() const return authorId; } -void RocketChatMessage::setAuthorId(const QString &value) +void RocketChatMessage::setAuthorId( const QString &value ) { authorId = value; } diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp index 13d5b6650f569ca6b9cfe4e0d5cb9fabac90f3aa..950bf168a7ee0e713d192937bb76d3c9071a822b 100755 --- a/rocketchatserver.cpp +++ b/rocketchatserver.cpp @@ -27,6 +27,9 @@ RocketChatServerData::RocketChatServerData( const QString &pId, QString pBaseUrl QString pApiUri ): mBaseUrl( pBaseUrl ), mApiUri( pApiUri ), mServerId( pId ), userModel( Models::getUsersModel() ), loginMethodsModel( Models::getLoginMethodsModel() ), channelsModel( Models::getPublicGroupsModel() ), directModel( Models::getDirectChannelsModel() ), groupsModel( Models::getPublicGroupsModel() ) { + qRegisterMetaType<User>( "User" ); + + mStorage = PersistanceLayer::instance(); mEmojiRepo = new EmojiRepo; historyLoaded = [ = ]( QMultiMap<QString, QSharedPointer<RocketChatMessage>> *messages ) { @@ -485,7 +488,7 @@ void RocketChatServerData::onUsersLoaded( const QString &pChannelId, const QVect for ( const auto &user : pUserList ) { if ( !user.isNull() ) { channel->addUser( user ); - userModel->insertUser( pChannelId, user ); + QMetaObject::invokeMethod( userModel, "insertUser", Q_ARG( QString, pChannelId ), Q_ARG( User, user ) ); } } } @@ -941,10 +944,19 @@ void RocketChatServerData::handleChannelMessage( const QJsonObject &pMessage ) QJsonObject data = args[1].toObject(); int unread = data[QStringLiteral( "unread" )].toInt(); QString rid = data[QStringLiteral( "rid" )].toString(); + QString type = data[QStringLiteral( "t" )].toString(); bool blocked = false; QString name = data[QStringLiteral( "name" )].toString(); + QString username = ""; + + if ( type == "d" ) { + username = name; + name = data[QStringLiteral( "fname" )].toString(); + } + bool hidden = false; + if ( data.contains( QStringLiteral( "open" ) ) ) { hidden = !data[QStringLiteral( "open" )].toBool(); } @@ -972,9 +984,10 @@ void RocketChatServerData::handleChannelMessage( const QJsonObject &pMessage ) channel->setName( name ); channel->setBlocked( blocked ); channel->setUnreadMessages( unread ); + channel->setUsername( username ); } else { - QSharedPointer<RocketChatChannel> channel = mChannelService->createChannelObject( rid, name, data["t"].toString() ); + QSharedPointer<RocketChatChannel> channel = mChannelService->createChannelObject( rid, name, data["t"].toString(), username ); channel->setBlocked( blocked ); channel->setUnreadMessages( unread ); mChannels->add( rid, channel ); @@ -1252,8 +1265,13 @@ void RocketChatServerData::handleStreamRoomMessage( const QJsonObject &pMessage auto message = mMessageService->parseMessage( currentArgObj, true ); if ( Q_LIKELY( mChannels->contains( roomId ) ) ) { + auto channel = mChannels->get( roomId ); mChannels->get( roomId )->addMessage( message ); mMessageService->persistMessage( message ); + + if ( message->getMessageType() == "au" ) { + mChannelService->loadUsersOfChannel( channel ); + } } } } @@ -1278,12 +1296,10 @@ void RocketChatServerData::handleUserJoinMessage( const QJsonObject &pMessage ) QSharedPointer<RocketChatChannel> channel = mChannels->get( roomId ); if ( !channel.isNull() ) { - QSharedPointer<RocketChatUser> ptr( new RocketChatUser( username ) ); - ptr->setUserId( userId ); - - if ( Q_LIKELY( channel->addUser( ptr ) ) ) { - emit userJoined( roomId, username ); - } + /* QSharedPointer<RocketChatUser> ptr( new RocketChatUser( username ) ); + ptr->setUserId( userId ); + */ + mChannelService->loadUsersOfChannel( channel ); } } } @@ -1935,7 +1951,7 @@ void RocketChatServerData::createPrivateGroup( const QString &pChannelName, cons mDdpApi->sendRequest( request ); } -void RocketChatServerData::addUsersToChannel( const QString &pChannelName, const QStringList &pUsers ) +void RocketChatServerData::addUsersToChannel( const QString &pChannelId, const QStringList &pUsers ) { for ( const auto &user : pUsers ) { DdpCallback success = [ = ]( QJsonObject response, MeteorDDP * ddpApi ) { @@ -1946,7 +1962,8 @@ void RocketChatServerData::addUsersToChannel( const QString &pChannelName, const if ( Q_LIKELY( !user.isEmpty() ) ) { QStringList usernames( user ); - QSharedPointer<RocketChatAddUsersToChannel > request( new RocketChatAddUsersToChannel( pChannelName, usernames ) ); + QSharedPointer<RocketChatAddUsersToChannel > request( new RocketChatAddUsersToChannel( pChannelId, usernames ) ); + request->setSuccess( success ); mDdpApi->sendRequest( request ); } } diff --git a/rocketchatserver.h b/rocketchatserver.h index fec4ea2ad680506294df49c05aba55897777305a..e7a6359f56d0070b39b4b9294690ceb6440d44d9 100755 --- a/rocketchatserver.h +++ b/rocketchatserver.h @@ -126,7 +126,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 addUsersToChannel( const QString &pChannelId, const QStringList &pUsers ); void sendMessage( const QString &pMessage, const QString &pChannelId ); void uploadFile( const QString &pChannelId, const QString &pFile ); @@ -327,7 +327,6 @@ class RocketChatServerData : public QObject void onHashLoggedIn( const QString &pServer ); void privateChannelCreated( const QString &pServerId, const QString &pRid, const QString &pUsername ); void loginError( void ); - void userJoined( const QString &pChannelId, const QString &pUsername ); void loggedOut( const QString &pServerId ); void suggestionsReady( QVariantMap ); void fileUploadFinished( const QString &pData );