[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 ¤tRoomId)
+void UsersModelForRoom::setCurrentRoomId(const QString ¤tRoomId)
{
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 ¤tRoomId);
-
-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