Fix null errors in qml

This commit is contained in:
Nicolas Werner 2020-09-03 19:51:50 +02:00
parent 77e241b9e5
commit b05c101021
8 changed files with 24 additions and 21 deletions

View File

@ -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

View File

@ -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

View File

@ -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)
}
}

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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
{

View File

@ -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;