Handle multiple line names
Add function to get the display name for an author on a single line as nothing stops there being linebreaks. BUG:476731
This commit is contained in:
@@ -135,6 +135,21 @@
|
|||||||
"unsigned": {
|
"unsigned": {
|
||||||
"age": 1234
|
"age": 1234
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"displayname": "Look\nat\nme\nI\nput\nnewlines\nin\nmy\ndisplay name",
|
||||||
|
"membership": "join"
|
||||||
|
},
|
||||||
|
"event_id": "$143273582443PhrSh:example.org",
|
||||||
|
"origin_server_ts": 1432735824659,
|
||||||
|
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||||
|
"sender": "@newline:example.org",
|
||||||
|
"state_key": "@newline:example.org",
|
||||||
|
"type": "m.room.member",
|
||||||
|
"unsigned": {
|
||||||
|
"age": 12345
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -373,6 +388,20 @@
|
|||||||
"unsigned": {
|
"unsigned": {
|
||||||
"age": 1238
|
"age": 1238
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"body": "A message from someone who thought it was a good idea to put newlines in their display name.",
|
||||||
|
"msgtype": "m.text"
|
||||||
|
},
|
||||||
|
"event_id": "$153456889:example.org",
|
||||||
|
"origin_server_ts": 14327358246589,
|
||||||
|
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||||
|
"sender": "@newline:example.org",
|
||||||
|
"type": "m.room.message",
|
||||||
|
"unsigned": {
|
||||||
|
"age": 1230
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"limited": true,
|
"limited": true,
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ private Q_SLOTS:
|
|||||||
void nullAuthor();
|
void nullAuthor();
|
||||||
void authorDisplayName();
|
void authorDisplayName();
|
||||||
void nullAuthorDisplayName();
|
void nullAuthorDisplayName();
|
||||||
|
void singleLineSidplayName();
|
||||||
|
void nullSingleLineDisplayName();
|
||||||
void time();
|
void time();
|
||||||
void nullTime();
|
void nullTime();
|
||||||
void timeString();
|
void timeString();
|
||||||
@@ -203,6 +205,23 @@ void EventHandlerTest::nullAuthorDisplayName()
|
|||||||
QCOMPARE(noEventHandler.getAuthorDisplayName(), QString());
|
QCOMPARE(noEventHandler.getAuthorDisplayName(), QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventHandlerTest::singleLineSidplayName()
|
||||||
|
{
|
||||||
|
auto event = room->messageEvents().at(11).get();
|
||||||
|
eventHandler.setEvent(event);
|
||||||
|
|
||||||
|
QCOMPARE(eventHandler.singleLineAuthorDisplayname(), QStringLiteral("Look at me I put newlines in my display name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventHandlerTest::nullSingleLineDisplayName()
|
||||||
|
{
|
||||||
|
QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_room set to nullptr.");
|
||||||
|
QCOMPARE(emptyHandler.singleLineAuthorDisplayname(), QString());
|
||||||
|
|
||||||
|
QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_event set to nullptr.");
|
||||||
|
QCOMPARE(noEventHandler.singleLineAuthorDisplayname(), QString());
|
||||||
|
}
|
||||||
|
|
||||||
void EventHandlerTest::time()
|
void EventHandlerTest::time()
|
||||||
{
|
{
|
||||||
auto event = room->messageEvents().at(0).get();
|
auto event = room->messageEvents().at(0).get();
|
||||||
|
|||||||
@@ -169,6 +169,28 @@ QString EventHandler::getAuthorDisplayName(bool isPending) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString EventHandler::singleLineAuthorDisplayname(bool isPending) const
|
||||||
|
{
|
||||||
|
if (m_room == nullptr) {
|
||||||
|
qCWarning(EventHandling) << "getAuthorDisplayName called with m_room set to nullptr.";
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
if (m_event == nullptr) {
|
||||||
|
qCWarning(EventHandling) << "getAuthorDisplayName called with m_event set to nullptr.";
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto author = isPending ? m_room->localUser() : m_room->user(m_event->senderId());
|
||||||
|
auto displayName = m_room->htmlSafeMemberName(author->id());
|
||||||
|
displayName.replace(QStringLiteral("<br>\n"), QStringLiteral(" "));
|
||||||
|
displayName.replace(QStringLiteral("<br>"), QStringLiteral(" "));
|
||||||
|
displayName.replace(QStringLiteral("<br />\n"), QStringLiteral(" "));
|
||||||
|
displayName.replace(QStringLiteral("<br />"), QStringLiteral(" "));
|
||||||
|
displayName.replace(u'\n', QStringLiteral(" "));
|
||||||
|
displayName.replace(u'\u2028', QStringLiteral(" "));
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
QDateTime EventHandler::getTime(bool isPending, QDateTime lastUpdated) const
|
QDateTime EventHandler::getTime(bool isPending, QDateTime lastUpdated) const
|
||||||
{
|
{
|
||||||
if (m_event == nullptr) {
|
if (m_event == nullptr) {
|
||||||
|
|||||||
@@ -111,6 +111,17 @@ public:
|
|||||||
*/
|
*/
|
||||||
QString getAuthorDisplayName(bool isPending = false) const;
|
QString getAuthorDisplayName(bool isPending = false) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the display name of the event author but with any newlines removed.
|
||||||
|
*
|
||||||
|
* Turns out you can put newlines in your display name so we need to handle that
|
||||||
|
* primarily for the room list subtitle.
|
||||||
|
*
|
||||||
|
* @param isPending whether the event is pending as this cannot be derived from
|
||||||
|
* just the event object.
|
||||||
|
*/
|
||||||
|
QString singleLineAuthorDisplayname(bool isPending = false) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return a QDateTime object for the event timestamp.
|
* @brief Return a QDateTime object for the event timestamp.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ QString NeoChatRoom::lastEventToString(Qt::TextFormat format, bool stripNewlines
|
|||||||
body = eventHandler.getPlainBody(stripNewlines);
|
body = eventHandler.getPlainBody(stripNewlines);
|
||||||
}
|
}
|
||||||
|
|
||||||
return safeMemberName(event->senderId()) + (event->isStateEvent() ? QLatin1String(" ") : QLatin1String(": ")) + body;
|
return eventHandler.singleLineAuthorDisplayname() + (event->isStateEvent() ? QLatin1String(" ") : QLatin1String(": ")) + body;
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user