From kde-commits Wed Feb 28 21:14:36 2018 From: Laurent Montel Date: Wed, 28 Feb 2018 21:14:36 +0000 To: kde-commits Subject: [ruqola] /: Check if we can modify room Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=151985248919271 Git commit 444b874a3050e81d992338951acc76997950f892 by Laurent Montel. Committed on 28/02/2018 at 21:14. Pushed by mlaurent into branch 'master'. Check if we can modify room M +2 -2 autotests/roommodeltest.cpp M +4 -6 autotests/roomtest.cpp M +13 -3 autotests/roomwrappertest.cpp M +1 -0 autotests/roomwrappertest.h M +2 -2 src/model/roommodel.cpp M +6 -0 src/qml/ChannelInfoDialog.qml M +3 -5 src/qml/PrivateChannelInfoDialog.qml M +7 -0 src/qml/TextFieldEditor.qml M +6 -4 src/rocketchataccount.cpp M +2 -0 src/rocketchataccount.h M +58 -25 src/room.cpp M +8 -7 src/room.h M +7 -2 src/roomwrapper.cpp M +4 -2 src/roomwrapper.h M +7 -0 src/utils.cpp M +1 -0 src/utils.h https://commits.kde.org/ruqola/444b874a3050e81d992338951acc76997950f892 diff --git a/autotests/roommodeltest.cpp b/autotests/roommodeltest.cpp index fa259ee..79dc262 100644 --- a/autotests/roommodeltest.cpp +++ b/autotests/roommodeltest.cpp @@ -425,8 +425,8 @@ void RoomModelTest::shouldReturnData() input->setName(name); input->setSelected(selected); input->setChannelType(roomType); - input->setUserId(userId); - input->setUserName(userName); + input->setRoomCreatorUserId(userId); + input->setRoomCreatorUserName(userName); input->setTopic(topic); input->setMutedUsers(mutedUsers); input->setJitsiTimeout(time); diff --git a/autotests/roomtest.cpp b/autotests/roomtest.cpp index a620722..5664abf 100644 --- a/autotests/roomtest.cpp +++ b/autotests/roomtest.cpp @@ -63,8 +63,8 @@ void RoomTest::shouldSerialized() input.setChannelType(QStringLiteral("p")); input.setName(QStringLiteral("d")); input.setAnnouncement(QStringLiteral("AA")); - input.setUserName(QStringLiteral("pp")); - input.setUserId(QStringLiteral("sdfsdfs")); + input.setRoomCreatorUserName(QStringLiteral("pp")); + input.setRoomCreatorUserId(QStringLiteral("sdfsdfs")); input.setTopic(QStringLiteral("topic")); input.setMutedUsers(QStringList{QStringLiteral("mutedUsers"), QStringL= iteral("muted2")}); input.setJitsiTimeout(55); @@ -90,7 +90,6 @@ void RoomTest::shouldEmitSignals() QSignalSpy spyannouncementChanged(&input, &Room::announcementChanged); QSignalSpy spytopicChanged(&input, &Room::topicChanged); QSignalSpy spyfavoriteChanged(&input, &Room::favoriteChanged); - QSignalSpy spyuserIdChanged(&input, &Room::userIdChanged); QSignalSpy spyalertChanged(&input, &Room::alertChanged); QSignalSpy spyreadOnlyChanged(&input, &Room::readOnlyChanged); QSignalSpy spyunreadChanged(&input, &Room::unreadChanged); @@ -101,8 +100,8 @@ void RoomTest::shouldEmitSignals() input.setChannelType(QStringLiteral("p")); input.setName(QStringLiteral("d")); input.setAnnouncement(QStringLiteral("AA")); - input.setUserName(QStringLiteral("pp")); - input.setUserId(QStringLiteral("sdfsdfs")); + input.setRoomCreatorUserName(QStringLiteral("pp")); + input.setRoomCreatorUserId(QStringLiteral("sdfsdfs")); input.setTopic(QStringLiteral("topic")); input.setMutedUsers(QStringList{QStringLiteral("mutedUsers"), QStringL= iteral("muted2")}); input.setJitsiTimeout(55); @@ -120,7 +119,6 @@ void RoomTest::shouldEmitSignals() QCOMPARE(spyannouncementChanged.count(), 1); QCOMPARE(spytopicChanged.count(), 1); QCOMPARE(spyfavoriteChanged.count(), 1); - QCOMPARE(spyuserIdChanged.count(), 1); QCOMPARE(spyalertChanged.count(), 1); QCOMPARE(spyreadOnlyChanged.count(), 1); QCOMPARE(spyunreadChanged.count(), 1); diff --git a/autotests/roomwrappertest.cpp b/autotests/roomwrappertest.cpp index 89cde45..167eef9 100644 --- a/autotests/roomwrappertest.cpp +++ b/autotests/roomwrappertest.cpp @@ -40,7 +40,7 @@ void RoomWrapperTest::shouldHaveDefaultValue() QVERIFY(w.channelType().isEmpty()); QVERIFY(!w.favorite()); QVERIFY(!w.blocker()); - QVERIFY(w.userId().isEmpty()); + QVERIFY(w.roomCreatorUserId().isEmpty()); QVERIFY(w.rid().isEmpty()); QVERIFY(w.description().isEmpty()); QVERIFY(!w.archived()); @@ -272,7 +272,7 @@ void RoomWrapperTest::shouldAssignValue() // = const QString userId =3D QStringLiteral("foo"); - room->setUserId(userId); + room->setRoomCreatorUserId(userId); QCOMPARE(spyRoomAnnoucementChanged.count(), 0); QCOMPARE(spyRoomTopicChanged.count(), 0); QCOMPARE(spyRoomNameChanged.count(), 0); @@ -280,7 +280,7 @@ void RoomWrapperTest::shouldAssignValue() QCOMPARE(spyRoomBlockerChanged.count(), 0); QCOMPARE(spyRoomDescriptionChanged.count(), 0); QCOMPARE(spyRoomArchivedChanged.count(), 0); - QCOMPARE(w.userId(), userId); + QCOMPARE(w.roomCreatorUserId(), userId); = const QString rId =3D QStringLiteral("foo"); room->setId(rId); @@ -295,3 +295,13 @@ void RoomWrapperTest::shouldAssignValue() = delete room; } + +void RoomWrapperTest::shouldVerifyCanBeModify() +{ + Room *room =3D new Room(); + room->setRoomCreatorUserId(QStringLiteral("foo")); + RoomWrapper w(room); + QVERIFY(!w.canBeModify()); + //TODO check true but we need to add rocketchataccount; + delete room; +} diff --git a/autotests/roomwrappertest.h b/autotests/roomwrappertest.h index 9477d78..194af69 100644 --- a/autotests/roomwrappertest.h +++ b/autotests/roomwrappertest.h @@ -32,6 +32,7 @@ public: private Q_SLOTS: void shouldHaveDefaultValue(); void shouldAssignValue(); + void shouldVerifyCanBeModify(); }; = #endif // ROOMWRAPPERTEST_H diff --git a/src/model/roommodel.cpp b/src/model/roommodel.cpp index 55de512..1724d47 100644 --- a/src/model/roommodel.cpp +++ b/src/model/roommodel.cpp @@ -175,9 +175,9 @@ QVariant RoomModel::data(const QModelIndex &index, int = role) const case RoomModel::RoomType: return r->channelType(); case RoomModel::RoomUserID: - return r->userId(); + return r->roomCreatorUserId(); case RoomModel::RoomUserName: - return r->userName(); + return r->roomCreatorUserName(); case RoomModel::RoomTopic: return r->topic(); case RoomModel::RoomMutedUsers: diff --git a/src/qml/ChannelInfoDialog.qml b/src/qml/ChannelInfoDialog.qml index 92aef11..f3a85c0 100644 --- a/src/qml/ChannelInfoDialog.qml +++ b/src/qml/ChannelInfoDialog.qml @@ -47,6 +47,11 @@ QQC2.Dialog { = function initializeAndOpen() { + channelNameField.setReadOnly(!roomInfo.canBeModify); + channelCommentField.setReadOnly(!roomInfo.canBeModify); + channelAnnoucementField.setReadOnly(!roomInfo.canBeModify); + channelDescriptionField.setReadOnly(!roomInfo.canBeModify); + open(); } = @@ -58,6 +63,7 @@ QQC2.Dialog { TextFieldEditor { id: channelNameField textField: roomInfo =3D=3D=3D null ? "" : roomInfo.name + onUpdateValue: { if (newVal !=3D "") { channelInfoDialog.modifyChannelSetting(channelName, Ro= cketChatAccount.Name, newVal) diff --git a/src/qml/PrivateChannelInfoDialog.qml b/src/qml/PrivateChannelI= nfoDialog.qml index 64f4e1c..fcb1d5d 100644 --- a/src/qml/PrivateChannelInfoDialog.qml +++ b/src/qml/PrivateChannelInfoDialog.qml @@ -41,17 +41,15 @@ QQC2.Dialog { = function initializeAndOpen() { - avatarRect.avatarurl =3D appid.rocketChatAccount.avatarUrl(roomInf= o.userId) - //console.log("ddddd " + avatarRect.avatarurl + " roomInfo.rid" + = roomInfo.userId) + avatarRect.avatarurl =3D appid.rocketChatAccount.avatarUrlFromDire= ctChannel(roomInfo.rid) open(); } = ColumnLayout { AvatarImage { id: avatarRect - avatarurl: roomInfo ? appid.rocketChatAccount.avatarUrl(roomIn= fo.userId) : "" - //aliasname: i_aliasname - //username: i_username + implicitHeight: 160 + implicitWidth: 160 } = Button { diff --git a/src/qml/TextFieldEditor.qml b/src/qml/TextFieldEditor.qml index dcfba47..e3debe7 100644 --- a/src/qml/TextFieldEditor.qml +++ b/src/qml/TextFieldEditor.qml @@ -30,6 +30,12 @@ RowLayout { signal updateValue(string newVal) property alias textField: channelNameField.text = + function setReadOnly(ro) + { + channelNameField.readOnly =3D ro; + channelIcon.visible =3D !ro; + } + function clear() { channelNameField.clear() @@ -47,6 +53,7 @@ RowLayout { } = Kirigami.Icon { + id: channelIcon source: "document-edit" width: 24 height: 24 diff --git a/src/rocketchataccount.cpp b/src/rocketchataccount.cpp index 94ebd0b..c24b0ac 100644 --- a/src/rocketchataccount.cpp +++ b/src/rocketchataccount.cpp @@ -307,6 +307,11 @@ void RocketChatAccount::updateMessage(const QString &r= oomID, const QString &mess ddp()->method(QStringLiteral("updateMessage"), QJsonDocument(json), DD= PClient::Persistent); } = +QString RocketChatAccount::avatarUrlFromDirectChannel(const QString &rid) +{ + return mCache->avatarUrl(Utils::userIdFromDirectChannel(rid, userID())= ); +} + QString RocketChatAccount::avatarUrl(const QString &userId) { return mCache->avatarUrl(userId); @@ -936,10 +941,7 @@ void RocketChatAccount::blockUser(const QString &rid, = bool block) } else { //qDebug() << " void RocketChatAccount::blockUser userId " << user= Id << " block " << block << " rid " << rid << " own userdId" << userID(); = - //Info from fairchat - QString userId =3D rid; - userId.remove(userID()); - + const QString userId =3D Utils::userIdFromDirectChannel(rid, userI= D()); if (block) { ddp()->blockUser(rid, userId); } else { diff --git a/src/rocketchataccount.h b/src/rocketchataccount.h index 11f3224..a10e6a7 100644 --- a/src/rocketchataccount.h +++ b/src/rocketchataccount.h @@ -149,6 +149,7 @@ public: Q_INVOKABLE void setInputTextChanged(const QString &str, int position); Q_INVOKABLE QString replaceWord(const QString &newWord, const QString = &str, int position); Q_INVOKABLE void blockUser(const QString &userId, bool block); + Q_INVOKABLE QString avatarUrlFromDirectChannel(const QString &rid); = SearchChannelModel *searchChannelModel() const; UserCompleterModel *userCompleterModel() const; @@ -217,6 +218,7 @@ public: void updateUser(const QJsonObject &object); = void initializeSettings(const QString &accountFileName); + Q_SIGNALS: void connectedChanged(); void accountNameChanged(); diff --git a/src/room.cpp b/src/room.cpp index ab96481..3b61a62 100644 --- a/src/room.cpp +++ b/src/room.cpp @@ -20,6 +20,7 @@ * */ = +#include "rocketchataccount.h" #include "room.h" #include "ruqola_debug.h" #include "model/usersforroommodel.h" @@ -33,6 +34,7 @@ = Room::Room(RocketChatAccount *account, QObject *parent) : QObject(parent) + , mRocketChatAccount(account) { mUsersModelForRoom =3D new UsersForRoomModel(this); mUsersModelForRoom->setObjectName(QStringLiteral("usersforroommodel")); @@ -61,8 +63,8 @@ bool Room::isEqual(const Room &other) const && (mChannelType =3D=3D other.channelType()) && (mName =3D=3D other.name()) && (mAnnouncement =3D=3D other.announcement()) - && (mUserName =3D=3D other.userName()) - && (mUserId =3D=3D other.userId()) + && (mRoomCreatorUserName =3D=3D other.roomCreatorUserName()) + && (mRoomCreateUserId =3D=3D other.roomCreatorUserId()) && (mTopic =3D=3D other.topic()) && (mMutedUsers =3D=3D other.mutedUsers()) && (mJitsiTimeout =3D=3D other.jitsiTimeout()) @@ -87,8 +89,8 @@ QDebug operator <<(QDebug d, const Room &t) d << "type :" << t.channelType(); d << "name :" << t.name(); d << "mAnnouncement :" << t.announcement(); - d << "userName :" << t.userName(); - d << "userID :" << t.userId(); + d << "roomCreaterUserName :" << t.roomCreatorUserName(); + d << "roomCreaterUserID :" << t.roomCreatorUserId(); d << "topic :" << t.topic(); d << "mutedUsers :" << t.mutedUsers(); d << "jitsiTimeout :" << t.jitsiTimeout(); @@ -103,12 +105,22 @@ QDebug operator <<(QDebug d, const Room &t) return d; } = +bool Room::canBeModify() const +{ + if (mRocketChatAccount) { + qDebug() << "mRoomCreateUserId"<userID()"<userID(); + return (mRoomCreateUserId =3D=3D mRocketChatAccount->userID()); + } + return false; +} + void Room::parseUpdateRoom(const QJsonObject &json) { qDebug() << " void Room::parseUpdateRoom(const QJsonObject &json)"<setId(o[QStringLiteral("rid")].toString()); r->setChannelType(o[QStringLiteral("t")].toString()); r->setName(o[QStringLiteral("name")].toString()); - r->setUserName(o[QStringLiteral("userName")].toString()); - r->setUserId(o[QStringLiteral("userID")].toString()); + r->setRoomCreatorUserName(o[QStringLiteral("roomCreatorUserName")].toS= tring()); + r->setRoomCreatorUserId(o[QStringLiteral("roomCreatorUserID")].toStrin= g()); r->setTopic(o[QStringLiteral("topic")].toString()); r->setJitsiTimeout(o[QStringLiteral("jitsiTimeout")].toDouble()); r->setReadOnly(o[QStringLiteral("ro")].toBool()); @@ -434,7 +468,6 @@ Room *Room::fromJSon(const QJsonObject &o) r->setOpen(o[QStringLiteral("open")].toBool()); r->setArchived(o[QStringLiteral("archived")].toBool()); r->setDescription(o[QStringLiteral("description")].toString()); - //TODO ??? r->setBlocker(o[QStringLiteral("blocker")].toBool()); const QJsonArray mutedArray =3D o.value(QLatin1String("mutedUsers")).t= oArray(); QStringList lst; @@ -455,8 +488,8 @@ QByteArray Room::serialize(Room *r) o[QStringLiteral("rid")] =3D r->id(); o[QStringLiteral("t")] =3D r->channelType(); o[QStringLiteral("name")] =3D r->name(); - o[QStringLiteral("userName")] =3D r->userName(); - o[QStringLiteral("userID")] =3D r->userId(); + o[QStringLiteral("roomCreatorUserName")] =3D r->roomCreatorUserName(); + o[QStringLiteral("roomCreatorUserID")] =3D r->roomCreatorUserId(); o[QStringLiteral("topic")] =3D r->topic(); o[QStringLiteral("jitsiTimeout")] =3D r->jitsiTimeout(); o[QStringLiteral("ro")] =3D r->readOnly(); diff --git a/src/room.h b/src/room.h index e7bca88..f877258 100644 --- a/src/room.h +++ b/src/room.h @@ -55,11 +55,11 @@ public: //we can't use operator=3D=3D as it tests only id. We need it for auto= test bool isEqual(const Room &other) const; = - QString userName() const; - void setUserName(const QString &userName); + QString roomCreatorUserName() const; + void setRoomCreatorUserName(const QString &userName); = - QString userId() const; - void setUserId(const QString &userId); + QString roomCreatorUserId() const; + void setRoomCreatorUserId(const QString &userId); = QStringList mutedUsers() const; void setMutedUsers(const QStringList &mutedUsers); @@ -145,12 +145,12 @@ public: QString description() const; void setDescription(const QString &description); = + bool canBeModify() const; Q_SIGNALS: void nameChanged(); void announcementChanged(); void topicChanged(); void favoriteChanged(); - void userIdChanged(); void alertChanged(); void readOnlyChanged(); void unreadChanged(); @@ -177,8 +177,8 @@ private: QString mAnnouncement; = // u - QString mUserName; - QString mUserId; + QString mRoomCreatorUserName; + QString mRoomCreateUserId; = // topic QString mTopic; @@ -209,6 +209,7 @@ private: FilesForRoomFilterProxyModel *mFilesForRoomFilterProxyModel =3D nullpt= r; = MessageModel *mMessageModel =3D nullptr; + RocketChatAccount *mRocketChatAccount =3D nullptr; }; = LIBRUQOLACORE_EXPORT QDebug operator <<(QDebug d, const Room &t); diff --git a/src/roomwrapper.cpp b/src/roomwrapper.cpp index a69378d..9df04f3 100644 --- a/src/roomwrapper.cpp +++ b/src/roomwrapper.cpp @@ -82,9 +82,9 @@ QString RoomWrapper::channelType() const return mRoom->channelType(); } = -QString RoomWrapper::userId() const +QString RoomWrapper::roomCreatorUserId() const { - return mRoom->userId(); + return mRoom->roomCreatorUserId(); } = QString RoomWrapper::rid() const @@ -101,3 +101,8 @@ bool RoomWrapper::archived() const { return mRoom->archived(); } + +bool RoomWrapper::canBeModify() const +{ + return mRoom->canBeModify(); +} diff --git a/src/roomwrapper.h b/src/roomwrapper.h index 91b71bd..4f3f060 100644 --- a/src/roomwrapper.h +++ b/src/roomwrapper.h @@ -36,8 +36,9 @@ class LIBRUQOLACORE_EXPORT RoomWrapper : public QObject Q_PROPERTY(bool readOnly READ readOnly NOTIFY readOnlyChanged) Q_PROPERTY(bool blocker READ blocker NOTIFY blockerChanged) Q_PROPERTY(QString channelType READ channelType CONSTANT) - Q_PROPERTY(QString userId READ userId CONSTANT) + Q_PROPERTY(QString roomCreatorUserId READ roomCreatorUserId CONSTANT) Q_PROPERTY(QString rid READ rid CONSTANT) + Q_PROPERTY(bool canBeModify READ canBeModify CONSTANT) Q_PROPERTY(QString description READ description NOTIFY descriptionChan= ged) Q_PROPERTY(bool archived READ archived NOTIFY archivedChanged) Q_OBJECT @@ -54,10 +55,11 @@ public: bool readOnly() const; bool blocker() const; QString channelType() const; - QString userId() const; + QString roomCreatorUserId() const; QString rid() const; QString description() const; bool archived() const; + bool canBeModify() const; = Q_SIGNALS: void nameChanged(); diff --git a/src/utils.cpp b/src/utils.cpp index 47a29b1..ebcbc30 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -134,3 +134,10 @@ void Utils::parseNotification(const QJsonArray &conten= ts, QString &message, QStr qCDebug(RUQOLA_LOG) << "Problem with notication json: missing payl= oad"; } } + +QString Utils::userIdFromDirectChannel(const QString &rid, const QString &= userId) +{ + QString newUserId =3D rid; + newUserId.remove(userId); + return newUserId; +} diff --git a/src/utils.h b/src/utils.h index f40dc1d..539fb36 100644 --- a/src/utils.h +++ b/src/utils.h @@ -32,6 +32,7 @@ LIBRUQOLACORE_TESTS_EXPORT User::PresenceStatus presenceS= tatusFromString(const Q LIBRUQOLACORE_TESTS_EXPORT QString generateRichText(const QString &markDow= n, const QMap &mentions); LIBRUQOLACORE_TESTS_EXPORT QString extractRoomUserFromUrl(QString url); LIBRUQOLACORE_TESTS_EXPORT void parseNotification(const QJsonArray &conten= ts, QString &message, QString &title, QString &sender); +LIBRUQOLACORE_TESTS_EXPORT QString userIdFromDirectChannel(const QString &= rid, const QString &userId); } = #endif // UTILS_H