[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [ruqola] /: Allow to update user status
From:       Laurent Montel <null () kde ! org>
Date:       2018-01-31 21:23:36
Message-ID: E1egzqy-0002ZK-H2 () code ! kde ! org
[Download RAW message or body]

Git commit d87c5088ca0eeed4591a5248b7a1af1f27bfac06 by Laurent Montel.
Committed on 31/01/2018 at 20:46.
Pushed by mlaurent into branch 'master'.

Allow to update user status

M  +1    -1    CMakeLists.txt
M  +0    -4    autotests/roommodeltest.cpp
M  +0    -18   autotests/usertest.cpp
M  +0    -1    autotests/usertest.h
M  +1    -1    src/CMakeLists.txt
M  +1    -1    src/qml/RoomsComponent.qml
M  +6    -5    src/rocketchataccount.cpp
M  +3    -3    src/rocketchataccount.h
M  +17   -5    src/roommodel.cpp
M  +1    -1    src/roommodel.h
M  +1    -1    src/ruqola.h
M  +2    -2    src/ruqolaregisterengine.cpp
M  +0    -15   src/user.cpp
M  +1    -5    src/user.h
M  +3    -7    src/usersmodel.cpp
M  +3    -1    src/usersmodel.h
R  +21   -13   src/usersmodelforroom.cpp [from: src/usersforroommodel.cpp - 072% \
similarity] R  +5    -10   src/usersmodelforroom.h [from: src/usersforroommodel.h - \
074% similarity]

https://commits.kde.org/ruqola/d87c5088ca0eeed4591a5248b7a1af1f27bfac06

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c1cd7a..874a67a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(RUQOLA_VERSION "0.6.3")
+set(RUQOLA_VERSION "0.6.4")
 cmake_minimum_required(VERSION 3.1)
 project(Ruqola VERSION ${RUQOLA_VERSION})
 set (CMAKE_CXX_STANDARD 11)
diff --git a/autotests/roommodeltest.cpp b/autotests/roommodeltest.cpp
index 34cbd91..8142860 100644
--- a/autotests/roommodeltest.cpp
+++ b/autotests/roommodeltest.cpp
@@ -293,8 +293,6 @@ void RoomModelTest::shouldReturnDataDefault()
     QCOMPARE(output, QVariant(int(6))); // not favorite (3) + no channel selected or \
'p' (3) = total order(6)  output = sampleModel.data(sampleModel.index(0), \
RoomModel::RoomIcon);  QCOMPARE(output, QVariant(QIcon()));
-    output = sampleModel.data(sampleModel.index(0), RoomModel::RoomStatus);
-    QVERIFY(output.toString().isEmpty());//still status needs to be implemented in \
roomModel.cpp  }
 
 void RoomModelTest::shouldReturnData()
@@ -368,6 +366,4 @@ void RoomModelTest::shouldReturnData()
     QCOMPARE(output, QVariant(int(3))); // not favorite (0) + no channel selected or \
'p' (3) = total order(3)  output = sampleModel.data(sampleModel.index(0), \
RoomModel::RoomIcon);  QCOMPARE(output, \
                QVariant(QIcon::fromTheme(QStringLiteral("lock"))));
-    output = sampleModel.data(sampleModel.index(0), RoomModel::RoomStatus);
-    QVERIFY(output.toString().isEmpty());//still status needs to be implemented in \
roomModel.cpp  }
diff --git a/autotests/usertest.cpp b/autotests/usertest.cpp
index 98daa2e..1b02aee 100644
--- a/autotests/usertest.cpp
+++ b/autotests/usertest.cpp
@@ -40,7 +40,6 @@ void UserTest::shouldHaveDefaultValue()
     QVERIFY(u.userId().isEmpty());
     QVERIFY(u.status().isEmpty());
     QVERIFY(u.userName().isEmpty());
-    QVERIFY(u.listRooms().isEmpty());
 }
 
 void UserTest::shouldSetAndGetName()
@@ -103,23 +102,6 @@ void UserTest::shouldSetAndGetStatus()
     QCOMPARE(spy.count(), 2);
 }
 
-void UserTest::shouldSetAndGetListRooms()
-{
-    User sampleUser;
-    QStringList roomList;
-    QString room1 = QStringLiteral("myRoom1");
-    QString room2 = QStringLiteral("myRoom2");
-    QString room3 = QStringLiteral("myRoom3");
-    roomList.append(room1);
-    roomList.append(room2);
-    roomList.append(room3);
-
-    QSignalSpy spy(&sampleUser, &User::listRoomsChanged);
-    sampleUser.setListRooms(roomList);
-    QCOMPARE(sampleUser.listRooms(), roomList);
-    QCOMPARE(spy.count(), 1);
-}
-
 void UserTest::shouldParseUser()
 {
     User sampleUser;
diff --git a/autotests/usertest.h b/autotests/usertest.h
index b3cd690..4ade30f 100644
--- a/autotests/usertest.h
+++ b/autotests/usertest.h
@@ -34,7 +34,6 @@ private Q_SLOTS:
     void shouldSetAndGetName();
     void shouldSetAndGetStatus();
     void shouldSetAndGetUserId();
-    void shouldSetAndGetListRooms();
     void shouldParseUser();
     void checkEqualsAndUnequalsOperator();
 };
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 98e85cb..137d7d3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -39,7 +39,7 @@ set (Ruqola_core_srcs
     messageurl.cpp
     rocketchataccount.cpp
     rocketchataccountsettings.cpp
-    usersforroommodel.cpp
+    usersmodelforroom.cpp
     ruqolalogger.cpp
     ruqolaregisterengine.cpp
     ruqolaserverconfig.cpp
diff --git a/src/qml/RoomsComponent.qml b/src/qml/RoomsComponent.qml
index 55c7ad3..1b3cf81 100644
--- a/src/qml/RoomsComponent.qml
+++ b/src/qml/RoomsComponent.qml
@@ -136,7 +136,7 @@ Component {
                 appid.selectedRoomID = roomID;
                 appid.model = appid.rocketChatAccount.getMessageModelForRoom(roomID)
                 appid.selectedRoom = appid.rocketChatAccount.getRoom(roomID)
-                appid.userModel = \
appid.rocketChatAccount.getUsersForRoomModel(roomID) +                appid.userModel \
= appid.rocketChatAccount.getUsersModelForRoom(roomID)  }
         } //RoomsView
     }
diff --git a/src/rocketchataccount.cpp b/src/rocketchataccount.cpp
index 2acec36..b2bad57 100644
--- a/src/rocketchataccount.cpp
+++ b/src/rocketchataccount.cpp
@@ -28,7 +28,7 @@
 #include "ruqola.h"
 #include "messagequeue.h"
 #include "rocketchatbackend.h"
-#include "usersforroommodel.h"
+#include "usersmodelforroom.h"
 #include "roomfilterproxymodel.h"
 #include "ruqolalogger.h"
 #include "ruqolaserverconfig.h"
@@ -78,6 +78,7 @@ RocketChatAccount::RocketChatAccount(const QString \
                &accountFileName, QObject *pa
     connect(mRoomModel, &RoomModel::needToUpdateNotification, this, \
&RocketChatAccount::slotNeedToUpdateNotification);  \
mRoomFilterProxyModel->setSourceModel(mRoomModel);  mUserModel = new \
UsersModel(this); +    connect(mUserModel, &UsersModel::userStatusChanged, \
mRoomModel, &RoomModel::userStatusChanged);  mMessageQueue = new MessageQueue(this);
     mTypingNotification = new TypingNotification(this);
     mCache = new RocketChatCache(this, this);
@@ -206,14 +207,14 @@ MessageModel *RocketChatAccount::getMessageModelForRoom(const \
QString &roomID)  }
 }
 
-UsersForRoomModel *RocketChatAccount::getUsersForRoomModel(const QString &roomId)
+UsersModelForRoom *RocketChatAccount::getUsersModelForRoom(const QString &roomId)
 {
-    UsersForRoomModel *model = nullptr;
+    UsersModelForRoom *model = nullptr;
     if ((model = mUsersForRoomModels.value(roomId))) {
         return model;
     } else {
-        model = new UsersForRoomModel(this);
-        model->setCurrentRoomId(roomId);
+        model = new UsersModelForRoom(this);
+        //model->setCurrentRoomId(roomId);
         mUsersForRoomModels[roomId] = model;
         return model;
     }
diff --git a/src/rocketchataccount.h b/src/rocketchataccount.h
index aa02f62..c951f83 100644
--- a/src/rocketchataccount.h
+++ b/src/rocketchataccount.h
@@ -34,7 +34,7 @@ class DDPClient;
 class RestApiRequest;
 class MessageQueue;
 class RocketChatBackend;
-class UsersForRoomModel;
+class UsersModelForRoom;
 class RoomFilterProxyModel;
 class RuqolaLogger;
 class RuqolaServerConfig;
@@ -76,7 +76,7 @@ public:
     Q_INVOKABLE RoomFilterProxyModel *roomFilterProxyModel() const;
     Q_INVOKABLE RoomWrapper *getRoom(const QString &roomId);
     Q_INVOKABLE MessageModel *getMessageModelForRoom(const QString &roomID);
-    Q_INVOKABLE UsersForRoomModel *getUsersForRoomModel(const QString &roomId);
+    Q_INVOKABLE UsersModelForRoom *getUsersModelForRoom(const QString &roomId);
     Q_INVOKABLE QString getUserCurrentMessage(const QString &roomId);
     Q_INVOKABLE void setUserCurrentMessage(const QString &message, const QString \
&roomId);  
@@ -189,7 +189,7 @@ private:
     RocketChatAccountSettings *mSettings = nullptr;
     //room, messagemodel
     QHash<QString, MessageModel *> mMessageModels;
-    QHash<QString, UsersForRoomModel *> mUsersForRoomModels;
+    QHash<QString, UsersModelForRoom *> mUsersForRoomModels;
     QHash<QString, QString> mUserCurrentMessage;
 
     EmojiManager *mEmojiManager = nullptr;
diff --git a/src/roommodel.cpp b/src/roommodel.cpp
index cb233d0..d69a428 100644
--- a/src/roommodel.cpp
+++ b/src/roommodel.cpp
@@ -136,7 +136,6 @@ QHash<int, QByteArray> RoomModel::roleNames() const
     roles[RoomOrder] = "roomorder";
     roles[RoomFavorite] = "favorite";
     roles[RoomSection] = "sectionname";
-    roles[RoomStatus] = "status";
     roles[RoomIcon] = "channelicon";
     return roles;
 }
@@ -186,8 +185,6 @@ QVariant RoomModel::data(const QModelIndex &index, int role) \
const  return sectionName(r);
     case RoomModel::RoomOrder:
         return order(r);
-    case RoomModel::RoomStatus: //TODO
-        return QString();
     case RoomModel::RoomIcon:
         return icon(r);
     case RoomModel::RoomOtr:
@@ -319,6 +316,20 @@ void RoomModel::updateRoom(const QJsonObject &roomData)
     }
 }
 
+void RoomModel::userStatusChanged(const QString &id)
+{
+    const int roomCount{
+        mRoomsList.count()
+    };
+    for (int i = 0; i < roomCount; ++i) {
+        if (mRoomsList.at(i)->name() == id) {
+            const QModelIndex idx = createIndex(i, 0);
+            Q_EMIT dataChanged(idx, idx);
+            return;
+        }
+    }
+}
+
 void RoomModel::updateRoom(const QString &name, const QString &roomId, const QString \
&topic, const QString &announcement, bool readOnly)  {
     const int roomCount{
@@ -332,7 +343,8 @@ void RoomModel::updateRoom(const QString &name, const QString \
&roomId, const QSt  foundRoom->setAnnouncement(announcement);
             foundRoom->setName(name);
             foundRoom->setReadOnly(readOnly);
-            Q_EMIT dataChanged(createIndex(i, 0), createIndex(i, 0));
+            const QModelIndex idx = createIndex(i, 0);
+            Q_EMIT dataChanged(idx, idx);
 
             if (mRocketChatAccount) {
                 mRocketChatAccount->getMessageModelForRoom(roomId);
@@ -384,7 +396,7 @@ QIcon RoomModel::icon(Room *r) const
         return QIcon::fromTheme(QStringLiteral("irc-channel-active"));
     } else if (r->channelType() == QLatin1String("d")) {
         const QString userStatusIconFileName = \
                mRocketChatAccount->userStatusIconFileName(r->name());
-        qDebug() <<  "userStatusIconFileName"<<userStatusIconFileName << " r-> name" \
<< r->name(); +        //qDebug() <<  \
"userStatusIconFileName"<<userStatusIconFileName << " r-> name" << r->name();  if \
(userStatusIconFileName.isEmpty()) {  return \
QIcon::fromTheme(QStringLiteral("user-avaliable"));  } else {
diff --git a/src/roommodel.h b/src/roommodel.h
index 74709c3..acec897 100644
--- a/src/roommodel.h
+++ b/src/roommodel.h
@@ -51,7 +51,6 @@ public:
         RoomOrder,
         RoomFavorite,
         RoomSection,
-        RoomStatus,
         RoomIcon,
         RoomOtr,
     };
@@ -96,6 +95,7 @@ public:
     void addRoom(Room *room);
 
     void getUnreadAlertFromAccount(bool &hasAlert, int &nbUnread);
+    void userStatusChanged(const QString &id);
 protected:
     QHash<int, QByteArray> roleNames() const override;
 
diff --git a/src/ruqola.h b/src/ruqola.h
index f1b854b..60e9298 100644
--- a/src/ruqola.h
+++ b/src/ruqola.h
@@ -38,7 +38,7 @@ class QmlAboutData;
 class TypingNotification;
 class RestApiRequest;
 class RocketChatAccount;
-class UsersForRoomModel;
+class UsersModelForRoom;
 class RoomFilterProxyModel;
 class LIBRUQOLACORE_EXPORT Ruqola : public QObject
 {
diff --git a/src/ruqolaregisterengine.cpp b/src/ruqolaregisterengine.cpp
index b619494..cab8f29 100644
--- a/src/ruqolaregisterengine.cpp
+++ b/src/ruqolaregisterengine.cpp
@@ -29,7 +29,7 @@
 #include "aboutdata/qmlaboutdataauthormodel.h"
 #include "ruqolaregisterengine.h"
 #include "ruqolautils.h"
-#include "usersforroommodel.h"
+#include "usersmodelforroom.h"
 #include "usersmodel.h"
 #include "statusmodel.h"
 #include "clipboardproxy.h"
@@ -56,7 +56,7 @@ bool RuqolaRegisterEngine::initialize()
     qmlRegisterType<MessageModel>("KDE.Ruqola.MessageModel", 1, 0, "MessageModel");
     qmlRegisterType<DDPClient>("KDE.Ruqola.DDPClient", 1, 0, "DDPClient");
     qmlRegisterType<RoomWrapper>("KDE.Ruqola.RoomWrapper", 1, 0, "RoomWrapper");
-    qmlRegisterType<UsersForRoomModel>("KDE.Ruqola.UsersForRoomModel", 1, 0, \
"UsersForRoomModel"); +    \
qmlRegisterType<UsersModelForRoom>("KDE.Ruqola.UsersForRoomModel", 1, 0, \
                "UsersForRoomModel");
     qmlRegisterType<RocketChatAccount>("KDE.Ruqola.RocketChatAccount", 1, 0, \
                "RocketChatAccount");
     qmlRegisterType<UsersModel>("KDE.Ruqola.UsersModel", 1, 0, "UsersModel");
     qmlRegisterType<User>("KDE.Ruqola.User", 1, 0, "User");
diff --git a/src/user.cpp b/src/user.cpp
index 3aa9284..3cc8b91 100644
--- a/src/user.cpp
+++ b/src/user.cpp
@@ -74,7 +74,6 @@ bool User::operator ==(const User &other) const
     return (mName == other.name())
            && (mUserId == other.userId())
            && (mStatus == other.status())
-           && (mListRooms == other.listRooms())
             && (mUserName == other.userName());
 }
 
@@ -96,26 +95,12 @@ void User::setUserName(const QString &userName)
     }
 }
 
-QStringList User::listRooms() const
-{
-    return mListRooms;
-}
-
-void User::setListRooms(const QStringList &listRooms)
-{
-    if (mListRooms != listRooms) {
-        mListRooms = listRooms;
-        Q_EMIT listRoomsChanged();
-    }
-}
-
 QDebug operator <<(QDebug d, const User &t)
 {
     d << "Name " << t.name();
     d << "UserId " << t.userId();
     d << "Status " << t.status();
     d << "UserName " << t.userName();
-    d << "List Rooms " << t.listRooms();
     return d;
 }
 
diff --git a/src/user.h b/src/user.h
index 76762b2..da6dcb0 100644
--- a/src/user.h
+++ b/src/user.h
@@ -30,7 +30,7 @@ class LIBRUQOLACORE_TESTS_EXPORT User : public QObject
     Q_OBJECT
     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
     Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged)
-    Q_PROPERTY(QStringList listRooms READ listRooms WRITE setListRooms NOTIFY \
listRoomsChanged) +    Q_PROPERTY(QString username READ userName WRITE setUserName \
NOTIFY userNameChanged)  public:
 
     enum class PresenceStatus {
@@ -54,11 +54,8 @@ public:
     QString status() const;
     void setStatus(const QString &status);
 
-    QStringList listRooms() const;
-    void setListRooms(const QStringList &listRooms);
 
     void parseUser(const QJsonObject &json);
-
     Q_INVOKABLE QString iconFromStatus() const;
 
     bool operator ==(const User &other) const;
@@ -70,7 +67,6 @@ public:
 Q_SIGNALS:
     void nameChanged();
     void statusChanged();
-    void listRoomsChanged();
     void userNameChanged();
 
 private:
diff --git a/src/usersmodel.cpp b/src/usersmodel.cpp
index 765c7c0..d15b1c2 100644
--- a/src/usersmodel.cpp
+++ b/src/usersmodel.cpp
@@ -50,8 +50,6 @@ QVariant UsersModel::data(const QModelIndex &index, int role) const
             return user->userId();
         case UserStatus:
             return user->status();
-        case UserListRooms:
-            return user->listRooms();
         case UserIcon:
             return user->iconFromStatus();
         default:
@@ -66,11 +64,8 @@ User *UsersModel::userFromName(const QString &name)
     const int userCount{
         mUsers.count()
     };
-    //qDebug() << " User *UsersModel::user(const QString &userId)"<< name;
     for (int i = 0; i < userCount; ++i) {
-        //qDebug() << " User *UsersModel::user(const QString &userId)"<< name<<" d \
"<<mUsers.at(i)->name();  if (mUsers.at(i)->userName() == name) {
-            qDebug() << " found user" << name;
             return mUsers.at(i);
         }
     }
@@ -130,8 +125,9 @@ void UsersModel::updateUser(const QJsonObject &array)
             const QJsonObject fields = \
                array.value(QLatin1String("fields")).toObject();
             const QString newStatus = \
fields.value(QLatin1String("status")).toString();  user->setStatus(newStatus);
-            //TODO name ?
-            Q_EMIT dataChanged(createIndex(i, 0), createIndex(i, 0));
+            const QModelIndex idx = createIndex(i, 0);
+            Q_EMIT dataChanged(idx, idx);
+            Q_EMIT userStatusChanged(mUsers.at(i)->userName());
             break;
         }
     }
diff --git a/src/usersmodel.h b/src/usersmodel.h
index 6a5d5e0..b0d0636 100644
--- a/src/usersmodel.h
+++ b/src/usersmodel.h
@@ -33,7 +33,6 @@ public:
         UserName = Qt::UserRole + 1,
         UserId,
         UserStatus,
-        UserListRooms,
         UserIcon
     };
 
@@ -49,6 +48,9 @@ public:
     void updateUser(const QJsonObject &array);
     Q_INVOKABLE User *user(const QString &userId);
     User *userFromName(const QString &name);
+
+Q_SIGNALS:
+    void userStatusChanged(const QString &id);
 private:
     QVector<User *> mUsers;
 };
diff --git a/src/usersforroommodel.cpp b/src/usersmodelforroom.cpp
similarity index 72%
rename from src/usersforroommodel.cpp
rename to src/usersmodelforroom.cpp
index 26ef947..0077ecd 100644
--- a/src/usersforroommodel.cpp
+++ b/src/usersmodelforroom.cpp
@@ -18,20 +18,21 @@
    Boston, MA 02110-1301, USA.
 */
 
-#include "usersforroommodel.h"
+#include "usersmodelforroom.h"
 #include "usersmodel.h"
 #include "ruqola_debug.h"
 
-UsersForRoomModel::UsersForRoomModel(QObject *parent)
-    : QSortFilterProxyModel(parent)
+UsersModelForRoom::UsersModelForRoom(QObject *parent)
+    : QAbstractListModel(parent)
 {
 }
 
-UsersForRoomModel::~UsersForRoomModel()
+UsersModelForRoom::~UsersModelForRoom()
 {
 }
 
-bool UsersForRoomModel::filterAcceptsRow(int source_row, const QModelIndex \
&source_parent) const +/*
+bool UsersModelForRoom::filterAcceptsRow(int source_row, const QModelIndex \
&source_parent) const  {
     if (mCurrentRoomId.isEmpty()) {
         qCWarning(RUQOLA_LOG) << "current room id is not defined. It's a bug";
@@ -41,20 +42,27 @@ bool UsersForRoomModel::filterAcceptsRow(int source_row, const \
QModelIndex &sour  if (!idx.isValid()) {
         return false;
     }
-    const QStringList lst = idx.data(UsersModel::UserListRooms).toStringList();
-    if (!lst.isEmpty()) {
-        return false;
-    }
-
-    return lst.contains(mCurrentRoomId);
+    return true;
 }
 
-QString UsersForRoomModel::currentRoomId() const
+QString UsersModelForRoom::currentRoomId() const
 {
     return mCurrentRoomId;
 }
 
-void UsersForRoomModel::setCurrentRoomId(const QString &currentRoomId)
+void UsersModelForRoom::setCurrentRoomId(const QString &currentRoomId)
 {
     mCurrentRoomId = currentRoomId;
 }
+*/
+
+
+int UsersModelForRoom::rowCount(const QModelIndex &parent) const
+{
+    return {};
+}
+
+QVariant UsersModelForRoom::data(const QModelIndex &index, int role) const
+{
+    return {};
+}
diff --git a/src/usersforroommodel.h b/src/usersmodelforroom.h
similarity index 74%
rename from src/usersforroommodel.h
rename to src/usersmodelforroom.h
index 1c5dcd9..b32d1fd 100644
--- a/src/usersforroommodel.h
+++ b/src/usersmodelforroom.h
@@ -24,20 +24,15 @@
 #include <QSortFilterProxyModel>
 #include "libruqolacore_export.h"
 
-class LIBRUQOLACORE_EXPORT UsersForRoomModel : public QSortFilterProxyModel
+class LIBRUQOLACORE_EXPORT UsersModelForRoom : public QAbstractListModel
 {
     Q_OBJECT
 public:
-    explicit UsersForRoomModel(QObject *parent = nullptr);
-    ~UsersForRoomModel();
+    explicit UsersModelForRoom(QObject *parent = nullptr);
+    ~UsersModelForRoom();
 
-    QString currentRoomId() const;
-    void setCurrentRoomId(const QString &currentRoomId);
-
-protected:
-    bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const \
                override;
-
-    QString mCurrentRoomId;
+    int rowCount(const QModelIndex &parent) const override;
+    QVariant data(const QModelIndex &index, int role) const override;
 };
 
 #endif // USERSFORROOMMODEL_H


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic