From 74fa9bc64128d88939259ccb2ba4dca51571559a Mon Sep 17 00:00:00 2001 From: Alexey Andreyev Date: Wed, 6 Mar 2019 22:13:05 +0300 Subject: Provide a colour code for the user Contributes to #296 --- lib/user.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'lib/user.cpp') diff --git a/lib/user.cpp b/lib/user.cpp index eec41957..b13f98b4 100644 --- a/lib/user.cpp +++ b/lib/user.cpp @@ -33,6 +33,9 @@ #include #include +#include +#include + #include using namespace QMatrixClient; @@ -47,8 +50,21 @@ class User::Private return Avatar(move(url)); } + qreal makeHueF(QString userId) + { + QByteArray hash = QCryptographicHash::hash(userId.toUtf8(), + QCryptographicHash::Sha1); + QDataStream dataStream(qToLittleEndian(hash).left(2)); + dataStream.setByteOrder(QDataStream::LittleEndian); + quint16 hashValue; + dataStream >> hashValue; + qreal hueF = static_cast(hashValue)/std::numeric_limits::max(); + Q_ASSERT((0 <= hueF) && (hueF <= 1)); + return hueF; + } + Private(QString userId, Connection* connection) - : userId(move(userId)), connection(connection) + : userId(move(userId)), connection(connection), hueF(makeHueF(userId)) { } QString userId; @@ -57,6 +73,7 @@ class User::Private QString bridged; QString mostUsedName; QMultiHash otherNames; + qreal hueF; Avatar mostUsedAvatar { makeAvatar({}) }; std::vector otherAvatars; auto otherAvatar(QUrl url) @@ -219,6 +236,11 @@ bool User::isGuest() const return *it == ':'; } +int User::hue() const +{ + return int(hueF()*359); +} + QString User::name(const Room* room) const { return d->nameForRoom(room); @@ -424,3 +446,7 @@ void User::processEvent(const RoomMemberEvent& event, const Room* room) updateAvatarUrl(event.avatarUrl(), d->avatarUrlForRoom(room), room); } } + +qreal User::hueF() const { + return d->hueF; +} -- cgit v1.2.3