From a6956715a7cdf0856a451329222b342b4362f946 Mon Sep 17 00:00:00 2001
From: Armin Felder <armin.felder@osalliance.com>
Date: Mon, 25 Jun 2018 17:11:40 +0200
Subject: [PATCH] improved user list

---
 CustomModels/usermodel.cpp            | 16 ++++++++++++----
 CustomModels/usermodel.h              |  5 +++--
 engine.pro                            |  3 ++-
 persistancelayer.cpp                  |  1 +
 repos/entities/rocketchatuser.cpp     | 10 ++++++++++
 repos/entities/rocketchatuser.h       |  6 +++++-
 services/rocketchatchannelservice.cpp |  6 ++++--
 sql/migrations/4.sql                  |  2 +-
 8 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/CustomModels/usermodel.cpp b/CustomModels/usermodel.cpp
index be7a82b..ab4a0a8 100644
--- a/CustomModels/usermodel.cpp
+++ b/CustomModels/usermodel.cpp
@@ -49,19 +49,25 @@ QVariant UserModel::data( const QModelIndex &index, int role ) const
         return user->getUserName();
     };
 
+    if ( role == UserRoles::name ) {
+        return user->getName();
+    }
+
     return QVariant();
 }
 
 bool UserModel::insertUser( const QString &channelId, const QSharedPointer<RocketChatUser> &user )
 {
+    beginResetModel();
 
     if ( !user.isNull() ) {
         userMap.insert( channelId, user );
-        setCurrent(getCurrent());
+        setCurrent( getCurrent() );
     } else {
         return true;
     }
 
+    endResetModel();
     //TODO: give some meainingfull return
     return true;
 }
@@ -77,9 +83,10 @@ void UserModel::setCurrent( const QString &value )
 
     userOfCurrentChannel.clear();
     beginResetModel();
-    QList<QSharedPointer<RocketChatUser>> userList = userMap.values(value);
-    for(auto current:userList){
-        userOfCurrentChannel.insert(current->getUserName(),current);
+    QList<QSharedPointer<RocketChatUser>> userList = userMap.values( value );
+
+    for ( auto current : userList ) {
+        userOfCurrentChannel.insert( current->getUserName(), current );
     }
 
     endResetModel();
@@ -95,5 +102,6 @@ QHash<int, QByteArray> UserModel::roleNames() const
     QHash<int, QByteArray> roles;
     roles[UserName] = QByteArrayLiteral( "username" );
     roles[UserId] =  QByteArrayLiteral( "userId" );
+    roles[name] = QByteArrayLiteral( "name" );
     return roles;
 }
diff --git a/CustomModels/usermodel.h b/CustomModels/usermodel.h
index 0563320..4b22298 100644
--- a/CustomModels/usermodel.h
+++ b/CustomModels/usermodel.h
@@ -37,7 +37,8 @@ class UserModel: public QAbstractListModel
         Q_PROPERTY( QString currentChannel READ getCurrent WRITE setCurrent NOTIFY currentChannelChanged )
         enum UserRoles {
             UserName = Qt::UserRole + 1,
-            UserId
+            UserId,
+            name
         };
     public:
         UserModel( QObject *parent = 0 );
@@ -52,7 +53,7 @@ class UserModel: public QAbstractListModel
         QHash<int, QByteArray> roleNames() const;
         QSet<QString> duplicateCheck;
         QMultiMap<QString, QSharedPointer<RocketChatUser>> userMap;
-        QMap<QString,QSharedPointer<RocketChatUser>> userOfCurrentChannel;
+        QMap<QString, QSharedPointer<RocketChatUser>> userOfCurrentChannel;
         QString current;
     signals:
         void currentChannelChanged( const QString &newText );
diff --git a/engine.pro b/engine.pro
index 2a054ec..b9dddf1 100644
--- a/engine.pro
+++ b/engine.pro
@@ -280,6 +280,7 @@ RESOURCES += \
     sql.qrc
 
 DISTFILES += \
-    sql/migrations/3.sql
+    sql/migrations/3.sql \
+    sql/migrations/4.sql
 
 
diff --git a/persistancelayer.cpp b/persistancelayer.cpp
index c3602f3..bec51d3 100755
--- a/persistancelayer.cpp
+++ b/persistancelayer.cpp
@@ -320,6 +320,7 @@ void PersistanceLayer::upgradeSchema()
                     if ( !query.exec() ) {
                         qWarning() << "migration to DB ver " << currentTarget << " failed";
                         qWarning() << query.lastError();
+                        qWarning() << query.lastQuery();
                         exit( EXIT_FAILURE );
                     }
                 }
diff --git a/repos/entities/rocketchatuser.cpp b/repos/entities/rocketchatuser.cpp
index 5ac7c55..b94bb87 100755
--- a/repos/entities/rocketchatuser.cpp
+++ b/repos/entities/rocketchatuser.cpp
@@ -81,3 +81,13 @@ bool RocketChatUser::operator==(const RocketChatUser lhs)
 {
     return lhs.getUserId() == this->getUserId();
 }
+
+QString RocketChatUser::getName() const
+{
+    return mName;
+}
+
+void RocketChatUser::setName(const QString &name)
+{
+    mName = name;
+}
diff --git a/repos/entities/rocketchatuser.h b/repos/entities/rocketchatuser.h
index 0b2c80f..b3e5495 100755
--- a/repos/entities/rocketchatuser.h
+++ b/repos/entities/rocketchatuser.h
@@ -53,13 +53,17 @@ class RocketChatUser : public QObject
         status getStatus() const;
         void setStatus( status );
 
-        inline bool operator==(const RocketChatUser lhs);
+        inline bool operator==( const RocketChatUser lhs );
+
+        QString getName() const;
+        void setName( const QString &name );
 
     private:
         QString mUserName;
         QString mSurname;
         QString mLastname;
         QString mUserId;
+        QString mName;
         status mStatus = status::OFFLINE;
     signals:
 
diff --git a/services/rocketchatchannelservice.cpp b/services/rocketchatchannelservice.cpp
index f1fcd4d..bab0ff9 100755
--- a/services/rocketchatchannelservice.cpp
+++ b/services/rocketchatchannelservice.cpp
@@ -312,8 +312,10 @@ void RocketChatChannelService::loadUsersOfChannel( QSharedPointer<RocketChatChan
                     for ( const auto &current : records ) {
                         if ( current.type() == QJsonValue::Object ) {
                             QJsonObject userObject = current.toObject();
-                            QString name = userObject["username"].toString();
-                            QSharedPointer<RocketChatUser> user( new RocketChatUser( name ) );
+                            QString username = userObject["username"].toString();
+                            QString name = userObject["name"].toString();
+                            QSharedPointer<RocketChatUser> user( new RocketChatUser( username ) );
+                            user->setName( name );
                             userList.append( user );
                         } else if ( current.type() == QJsonValue::String ) {
                             QString name = current.toString();
diff --git a/sql/migrations/4.sql b/sql/migrations/4.sql
index e1aaaab..dc7df83 100644
--- a/sql/migrations/4.sql
+++ b/sql/migrations/4.sql
@@ -1,2 +1,2 @@
-ALTER TABLE rooms add username varchar(100) DEFAULT "";
+ALTER TABLE rooms ADD username varchar(100) DEFAULT "";
 REPLACE INTO app_info (db_ver) VALUES(4);
-- 
GitLab