Initial support for display names

This commit is contained in:
Konstantinos Sideris 2017-05-08 19:44:01 +03:00
parent 63db04793b
commit 0834b246ad
5 changed files with 39 additions and 9 deletions

View file

@ -41,7 +41,10 @@ public:
static QString chooseRandomColor(); static QString chooseRandomColor();
static QString getUserColor(const QString &userid); static QString getUserColor(const QString &userid);
static QString displayName(const QString &userid);
static QMap<QString, QString> NICK_COLORS; static QMap<QString, QString> NICK_COLORS;
static QMap<QString, QString> DISPLAY_NAMES;
signals: signals:
void unreadMessages(QString roomid, int count); void unreadMessages(QString roomid, int count);

View file

@ -23,6 +23,7 @@
#include "ChatPage.h" #include "ChatPage.h"
#include "Sync.h" #include "Sync.h"
#include "TimelineViewManager.h"
#include "UserInfoWidget.h" #include "UserInfoWidget.h"
#include "AliasesEventContent.h" #include "AliasesEventContent.h"
@ -31,6 +32,7 @@
#include "CreateEventContent.h" #include "CreateEventContent.h"
#include "HistoryVisibilityEventContent.h" #include "HistoryVisibilityEventContent.h"
#include "JoinRulesEventContent.h" #include "JoinRulesEventContent.h"
#include "MemberEventContent.h"
#include "NameEventContent.h" #include "NameEventContent.h"
#include "PowerLevelsEventContent.h" #include "PowerLevelsEventContent.h"
#include "TopicEventContent.h" #include "TopicEventContent.h"
@ -320,6 +322,18 @@ void ChatPage::updateRoomState(RoomState &room_state, const QJsonArray &events)
room_state.name = name; room_state.name = name;
break; break;
} }
case events::EventType::RoomMember: {
events::StateEvent<events::MemberEventContent> member;
member.deserialize(event);
auto display_name = member.content().displayName();
if (display_name.isEmpty())
display_name = member.stateKey();
TimelineViewManager::DISPLAY_NAMES.insert(member.stateKey(), display_name);
break;
}
case events::EventType::RoomPowerLevels: { case events::EventType::RoomPowerLevels: {
events::StateEvent<events::PowerLevelsEventContent> power_levels; events::StateEvent<events::PowerLevelsEventContent> power_levels;
power_levels.deserialize(event); power_levels.deserialize(event);

View file

@ -483,15 +483,14 @@ void MatrixClient::sendTextMessage(const QString &roomid, const QString &msg) no
void MatrixClient::initialSync() noexcept void MatrixClient::initialSync() noexcept
{ {
QJsonArray excluded_event_types = { QJsonArray excluded_presence = {
QString("m.room.member"), QString("m.presence"),
}; };
QJsonObject filter{{"room", QJsonObject filter{{"room",
QJsonObject{{"timeline", QJsonObject{{"limit", 70}}}, QJsonObject{{"timeline", QJsonObject{{"limit", 70}}},
{"state", QJsonObject{{"not_types", excluded_event_types}}},
{"ephemeral", QJsonObject{{"limit", 0}}}}}, {"ephemeral", QJsonObject{{"limit", 0}}}}},
{"presence", QJsonObject{{"limit", 0}}}}; {"presence", QJsonObject{{"not_types", excluded_presence}}}};
QUrlQuery query; QUrlQuery query;
query.addQueryItem("full_state", "true"); query.addQueryItem("full_state", "true");

View file

@ -20,6 +20,7 @@
#include "ImageItem.h" #include "ImageItem.h"
#include "TimelineItem.h" #include "TimelineItem.h"
#include "TimelineViewManager.h"
namespace events = matrix::events; namespace events = matrix::events;
namespace msgs = matrix::events::messages; namespace msgs = matrix::events::messages;
@ -28,7 +29,7 @@ TimelineItem::TimelineItem(const QString &userid, const QString &color, const QS
: QWidget(parent) : QWidget(parent)
{ {
generateTimestamp(QDateTime::currentDateTime()); generateTimestamp(QDateTime::currentDateTime());
generateBody(userid, color, body); generateBody(TimelineViewManager::displayName(userid), color, body);
setupLayout(); setupLayout();
} }
@ -45,7 +46,7 @@ TimelineItem::TimelineItem(ImageItem *image, const events::MessageEvent<msgs::Im
{ {
auto timestamp = QDateTime::fromMSecsSinceEpoch(event.timestamp()); auto timestamp = QDateTime::fromMSecsSinceEpoch(event.timestamp());
generateTimestamp(timestamp); generateTimestamp(timestamp);
generateBody(event.sender(), color, ""); generateBody(TimelineViewManager::displayName(event.sender()), color, "");
top_layout_ = new QHBoxLayout(); top_layout_ = new QHBoxLayout();
top_layout_->setMargin(0); top_layout_->setMargin(0);
@ -87,7 +88,7 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Notice> &event, bool
body = "<i style=\"color: #565E5E\">" + body + "</i>"; body = "<i style=\"color: #565E5E\">" + body + "</i>";
if (with_sender) if (with_sender)
generateBody(event.sender(), color, body); generateBody(TimelineViewManager::displayName(event.sender()), color, body);
else else
generateBody(body); generateBody(body);
@ -103,7 +104,7 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Text> &event, bool w
generateTimestamp(timestamp); generateTimestamp(timestamp);
if (with_sender) if (with_sender)
generateBody(event.sender(), color, body); generateBody(TimelineViewManager::displayName(event.sender()), color, body);
else else
generateBody(body); generateBody(body);
@ -131,7 +132,11 @@ void TimelineItem::generateBody(const QString &body)
void TimelineItem::generateBody(const QString &userid, const QString &color, const QString &body) void TimelineItem::generateBody(const QString &userid, const QString &color, const QString &body)
{ {
auto sender = userid.split(":")[0].split("@")[1]; auto sender = userid;
// TODO: Fix this by using a UserId type.
if (userid.split(":")[0].split("@").size() > 1)
sender = userid.split(":")[0].split("@")[1];
content_label_ = new QLabel(this); content_label_ = new QLabel(this);
content_label_->setWordWrap(true); content_label_->setWordWrap(true);

View file

@ -129,6 +129,7 @@ void TimelineViewManager::setHistoryView(const QString &room_id)
} }
QMap<QString, QString> TimelineViewManager::NICK_COLORS; QMap<QString, QString> TimelineViewManager::NICK_COLORS;
QMap<QString, QString> TimelineViewManager::DISPLAY_NAMES;
QString TimelineViewManager::chooseRandomColor() QString TimelineViewManager::chooseRandomColor()
{ {
@ -198,3 +199,11 @@ QString TimelineViewManager::getUserColor(const QString &userid)
return color; return color;
} }
QString TimelineViewManager::displayName(const QString &userid)
{
if (DISPLAY_NAMES.contains(userid))
return DISPLAY_NAMES.value(userid);
return userid;
}