diff --git a/services/rocketchatchannelservice.cpp b/services/rocketchatchannelservice.cpp index 08c0cbe6a6387048251200b32592c0f23da0b509..f1fcd4dc6682dc289e46bc5ae7fe1e344e97b05c 100755 --- a/services/rocketchatchannelservice.cpp +++ b/services/rocketchatchannelservice.cpp @@ -466,6 +466,7 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString & qDebug() << data; channelVector channelList; QHash<QString, bool> ids; + QHash<QString, bool> names; if ( data.contains( "rooms" ) ) { QJsonArray rooms = data["rooms"].toArray(); @@ -480,6 +481,7 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString & QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, id, name, type ) ); channelList.append( ptr ); ids[id] = true; + names[name] = true; } } } @@ -499,11 +501,12 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString & ptr->setUsername( username ); channelList.append( ptr ); ids[id] = true; + names[name] = true; } } } - channelList << searchRoomLocal( pTerm, ids, pType ); + channelList << searchRoomLocal( pTerm, ids, pType, names ); if ( channelList.size() ) { qSort( channelList.begin(), channelList.end(), []( const QSharedPointer<RocketChatChannel> &v1, const QSharedPointer<RocketChatChannel> &v2 )->bool{ @@ -513,23 +516,23 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString & } }; - QSharedPointer<RestSpotlightRequest> request( new RestSpotlightRequest( pTerm, pType ) ); + QSharedPointer<RestSpotlightRequest> request( new RestSpotlightRequest( pTerm, "" ) ); request->setSuccess( success ); mServer->sendApiRequest( request ); } -channelVector RocketChatChannelService::searchRoomLocal( const QString &pTerm, const QHash<QString, bool> &pFilter, const QString &pType ) +channelVector RocketChatChannelService::searchRoomLocal( const QString &pTerm, const QHash<QString, bool> &pFilter, const QString &pType, const QHash<QString, bool> &pNames ) { channelVector list; for ( auto channel : mChannels->getElements() ) { QString id = channel->getRoomId(); QString type = channel->getType(); + QString name = channel->getName(); + QString username = channel->getUsername(); - if ( !pFilter.contains( id ) && ( pType.isEmpty() || pType == type ) ) { - QString name = channel->getName(); - QString username = channel->getUsername(); + if ( !pFilter.contains( id ) && !pNames.contains( name ) && pNames.contains( username ) && ( pType.isEmpty() || pType == type ) ) { if ( name.indexOf( pTerm, Qt::CaseInsensitive ) != -1 || username.indexOf( pTerm, Qt::CaseInsensitive ) != -1 ) { list.append( channel ); @@ -558,18 +561,37 @@ void RocketChatChannelService::openPrivateChannelWith( QString pUsername ) //TODO: fix if ( !mChannels->contains( rid ) ) { - channel = createChannelObject( rid, pUsername, "d" ); + DdpCallback success = [ = ]( QJsonObject pResponse, MeteorDDP * pDdp ) { + if ( pResponse.contains( "result" ) ) { + QString name = pResponse["fname"].toString(); + QString username = pResponse["name"].toString(); + QString id = pResponse["_id"].toString(); + QSharedPointer<RocketChatChannel> channel = createChannelObject( id, name, "d", username ); + + mServer->loadRecentHistory( rid ); + + if ( !channel.isNull() ) { + emit channelsLoaded( {channel}, true ); + mServer->sendDdprequest( subRoom ); + mServer->sendDdprequest( subMessages ); + emit directChannelReady( channel->getName(), "d" ); + } + } + }; + QSharedPointer<RocketChatGetRoomByNameAndType> detailsRequest( new RocketChatGetRoomByNameAndType( pUsername, "d" ) ); + detailsRequest->setSuccess( success ); + mServer->sendDdprequest( detailsRequest ); } else { channel = mChannels->get( rid ); - } - mServer->loadRecentHistory( rid ); + mServer->loadRecentHistory( rid ); - if ( !channel.isNull() ) { - emit channelsLoaded( {channel}, true ); - mServer->sendDdprequest( subRoom ); - mServer->sendDdprequest( subMessages ); - emit directChannelReady( channel->getName(), "d" ); + if ( !channel.isNull() ) { + emit channelsLoaded( {channel}, true ); + mServer->sendDdprequest( subRoom ); + mServer->sendDdprequest( subMessages ); + emit directChannelReady( channel->getName(), "d" ); + } } } } diff --git a/services/rocketchatchannelservice.h b/services/rocketchatchannelservice.h index 2198d5e6520d2a7dfe8c5a4f385da13007fd34a1..e24d25e0fbe190b80dc93975cccd81234048a3ec 100755 --- a/services/rocketchatchannelservice.h +++ b/services/rocketchatchannelservice.h @@ -90,7 +90,7 @@ class RocketChatChannelService : public QObject void searchRoom( const QString &pTerm, const QString &pType ); - channelVector searchRoomLocal( const QString &pTerm, const QHash<QString, bool> &pFilter, const QString &pType ); + channelVector searchRoomLocal( const QString &pTerm, const QHash<QString, bool> &pFilter, const QString &pType, const QHash<QString, bool> &pNames ); ~RocketChatChannelService();