diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml
index 0c4343c7..a3943806 100644
--- a/resources/qml/Avatar.qml
+++ b/resources/qml/Avatar.qml
@@ -14,7 +14,7 @@ Rectangle {
Label {
anchors.fill: parent
- text: chat.model.escapeEmoji(String.fromCodePoint(displayName.codePointAt(0)))
+ text: timelineManager.escapeEmoji(String.fromCodePoint(displayName.codePointAt(0)))
textFormat: Text.RichText
font.pixelSize: avatar.height/2
verticalAlignment: Text.AlignVCenter
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index 49f523a5..e4643635 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -167,8 +167,9 @@ Page {
width: avatarSize
height: avatarSize
- url: chat.model.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
- displayName: chat.model.roomName
+
+ url: chat.model ? chat.model.roomAvatarUrl.replace("mxc://", "image://MxcImage/") : ""
+ displayName: chat.model ? chat.model.roomName : qsTr("No room selected")
MouseArea {
anchors.fill: parent
@@ -182,7 +183,8 @@ Page {
Layout.row: 0
font.pointSize: fontMetrics.font.pointSize * 1.1
- text: chat.model.roomName
+
+ text: chat.model ? chat.model.roomName : qsTr("No room selected")
MouseArea {
anchors.fill: parent
@@ -193,9 +195,10 @@ Page {
Layout.fillWidth: true
Layout.column: 2
Layout.row: 1
- text: chat.model.roomTopic
Layout.maximumHeight: fontMetrics.lineSpacing * 2 // show 2 lines
clip: true
+
+ text: chat.model ? chat.model.roomTopic : ""
}
ImageButton {
@@ -387,7 +390,7 @@ Page {
Label {
id: userName
- text: chat.model.escapeEmoji(modelData.userName)
+ text: timelineManager.escapeEmoji(modelData.userName)
color: timelineManager.userColor(modelData.userId, colors.window)
textFormat: Text.RichText
diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml
index 56b8040e..90e52442 100644
--- a/resources/qml/delegates/MessageDelegate.qml
+++ b/resources/qml/delegates/MessageDelegate.qml
@@ -36,7 +36,7 @@ Item {
DelegateChoice {
roleValue: MtxEvent.EmoteMessage
NoticeMessage {
- formatted: chat.model.escapeEmoji(modelData.userName) + " " + model.data.formattedBody
+ formatted: timelineManager.escapeEmoji(modelData.userName) + " " + model.data.formattedBody
color: timelineManager.userColor(modelData.userId, colors.window)
}
}
diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml
index f9fd3f11..36a6d373 100644
--- a/resources/qml/delegates/Reply.qml
+++ b/resources/qml/delegates/Reply.qml
@@ -37,7 +37,7 @@ Item {
Text {
id: userName
- text: chat.model ? chat.model.escapeEmoji(reply.modelData.userName) : ""
+ text: timelineManager.escapeEmoji(reply.modelData.userName)
color: replyComponent.userColor
textFormat: Text.RichText
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index f596a587..32e9f92c 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -719,12 +719,6 @@ TimelineModel::formatDateSeparator(QDate date) const
return date.toString(fmt);
}
-QString
-TimelineModel::escapeEmoji(QString str) const
-{
- return utils::replaceEmoji(str);
-}
-
void
TimelineModel::viewRawMessage(QString id) const
{
@@ -1389,7 +1383,7 @@ TimelineModel::formatTypingUsers(const std::vector<QString> &users, QColor bg)
QStringList uidWithoutLast;
auto formatUser = [this, bg](const QString &user_id) -> QString {
- auto uncoloredUsername = escapeEmoji(displayName(user_id));
+ auto uncoloredUsername = utils::replaceEmoji(displayName(user_id));
QString prefix =
QString("<font color=\"%1\">").arg(manager_->userColor(user_id, bg).name());
@@ -1439,7 +1433,7 @@ TimelineModel::formatJoinRuleEvent(QString id)
return "";
QString user = QString::fromStdString(event->sender);
- QString name = escapeEmoji(displayName(user));
+ QString name = utils::replaceEmoji(displayName(user));
switch (event->content.join_rule) {
case mtx::events::state::JoinRule::Public:
@@ -1464,7 +1458,7 @@ TimelineModel::formatGuestAccessEvent(QString id)
return "";
QString user = QString::fromStdString(event->sender);
- QString name = escapeEmoji(displayName(user));
+ QString name = utils::replaceEmoji(displayName(user));
switch (event->content.guest_access) {
case mtx::events::state::AccessState::CanJoin:
@@ -1489,7 +1483,7 @@ TimelineModel::formatHistoryVisibilityEvent(QString id)
return "";
QString user = QString::fromStdString(event->sender);
- QString name = escapeEmoji(displayName(user));
+ QString name = utils::replaceEmoji(displayName(user));
switch (event->content.history_visibility) {
case mtx::events::state::Visibility::WorldReadable:
@@ -1522,7 +1516,7 @@ TimelineModel::formatPowerLevelEvent(QString id)
return "";
QString user = QString::fromStdString(event->sender);
- QString name = escapeEmoji(displayName(user));
+ QString name = utils::replaceEmoji(displayName(user));
// TODO: power levels rendering is actually a bit complex. work on this later.
return tr("%1 has changed the room's permissions.").arg(name);
@@ -1551,7 +1545,7 @@ TimelineModel::formatMemberEvent(QString id)
}
QString user = QString::fromStdString(event->state_key);
- QString name = escapeEmoji(displayName(user));
+ QString name = utils::replaceEmoji(displayName(user));
QString rendered;
// see table https://matrix.org/docs/spec/client_server/latest#m-room-member
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 1e482be2..6daaac1b 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -197,7 +197,6 @@ public:
Q_INVOKABLE QString formatGuestAccessEvent(QString id);
Q_INVOKABLE QString formatPowerLevelEvent(QString id);
- Q_INVOKABLE QString escapeEmoji(QString str) const;
Q_INVOKABLE void viewRawMessage(QString id) const;
Q_INVOKABLE void viewDecryptedRawMessage(QString id) const;
Q_INVOKABLE void openUserProfile(QString userid) const;
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 06f0fa3d..abb807b3 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -206,6 +206,12 @@ TimelineViewManager::setHistoryView(const QString &room_id)
}
}
+QString
+TimelineViewManager::escapeEmoji(QString str) const
+{
+ return utils::replaceEmoji(str);
+}
+
void
TimelineViewManager::openImageOverlay(QString mxcUrl, QString eventId) const
{
diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index 2de94b77..1a98f64d 100644
--- a/src/timeline/TimelineViewManager.h
+++ b/src/timeline/TimelineViewManager.h
@@ -50,6 +50,7 @@ public:
bool isNarrowView() const { return isNarrowView_; }
Q_INVOKABLE void openImageOverlay(QString mxcUrl, QString eventId) const;
Q_INVOKABLE QColor userColor(QString id, QColor background);
+ Q_INVOKABLE QString escapeEmoji(QString str) const;
Q_INVOKABLE QString userPresence(QString id) const;
Q_INVOKABLE QString userStatus(QString id) const;
|