Newer
Older
/********************************************************************************************
* *
* Copyright (C) 2017 Armin Felder, Dennis Beier *
* This file is part of RocketChatMobileEngine <https://git.fairkom.net/chat/fairchat>. *
* *
* RocketChatMobileEngine is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* RocketChatMobileEngine is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with RocketChatMobileEngine. If not, see <http://www.gnu.org/licenses/>. *
* *
********************************************************************************************/
UserModel::UserModel( QObject *parent ): QAbstractListModel( parent )
{
}
int UserModel::rowCount( const QModelIndex &parent ) const
{
Q_UNUSED( parent );
int count = userOfCurrentChannel.count();
qDebug() << "count of current channel users" << count;
return count;
}
QVariant UserModel::data( const QModelIndex &index, int role ) const
{
auto userList = userOfCurrentChannel.values();
if ( userList.count() < index.row() ) {
return QVariant();
}
switch ( roleType ) {
case UserRoles::UserName:
return user->getUserName();
switch ( user->getStatus() ) {
case RocketChatUser::status::ONLINE :
status = 0;
break;
case RocketChatUser::status::OFFLINE:
status = 2;
break;
case RocketChatUser::status::BUSY:
status = 3;
break;
}
return status;
}
bool UserModel::insertUser( const QString &channelId, const QSharedPointer<RocketChatUser> &user )
if ( mAllUsers.contains( user->getUserId() ) ) {
auto oldUser = mAllUsers[user->getUserId()];
if ( !user->getSurname().isEmpty() ) {
oldUser->setSurname( user->getSurname() );
}
if ( !user->getLastname().isEmpty() ) {
oldUser->setLastname( user->getLastname() );
}
if ( !user->getName().isEmpty() ) {
oldUser->setName( user->getName() );
}
if ( !user->getUserId().isEmpty() ) {
oldUser->setUserId( user->getUserId() );
}
userToAdd = oldUser;
} else {
userToAdd = user;
mAllUsers.insert( userToAdd->getUserId(), userToAdd );
connect( userToAdd.data(), &RocketChatUser::statusChanged, this, &UserModel::refreshUserList );
//TODO: give some meainingfull return
return true;
void UserModel::refreshUserList()
{
beginResetModel();
endResetModel();
}
QString UserModel::getCurrent() const
{
return current;
}
void UserModel::setCurrent( const QString &value )
{
current = value;
userOfCurrentChannel.clear();
beginResetModel();
QList<QSharedPointer<RocketChatUser>> userList = userMap.values( value );
userOfCurrentChannel.insert( current->getUserId(), current );
}
endResetModel();
}
void UserModel::onCurrentChannelChanged( const QString &newText )
{
current = newText;
}
QSharedPointer<RocketChatUser> UserModel::getUserById( const QString &pId )
if ( mAllUsers.contains( pId ) ) {
user = mAllUsers[pId];
}
void UserModel::addUser( const QSharedPointer<RocketChatUser> &pUser )
if ( !mAllUsers.contains( pUser->getUserId() ) ) {
mAllUsers.insert( pUser->getUserId(), pUser );
connect( pUser.data(), &RocketChatUser::statusChanged, this, &UserModel::refreshUserList );
} else {
auto oldUser = mAllUsers[pUser->getUserId()];
oldUser->setStatus( pUser->getStatus() );
}
QHash<int, QByteArray> UserModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[static_cast<int>( UserRoles::UserName )] = QByteArrayLiteral( "username" );
roles[static_cast<int>( UserRoles::UserId )] = QByteArrayLiteral( "userId" );
roles[static_cast<int>( UserRoles::name )] = QByteArrayLiteral( "name" );
roles[static_cast<int>( UserRoles::status )] = QByteArrayLiteral( "status" );