Display state of last message if it was sent by the user, fixes #152

This commit is contained in:
Sebastian Wolf 2020-11-14 14:10:24 +01:00
parent 7d78a2f126
commit fcf1bb2118
2 changed files with 33 additions and 1 deletions

View file

@ -19,7 +19,7 @@ PhotoTextsListItem {
// last message
secondaryText.text: last_message_text ? Emoji.emojify(last_message_text, Theme.fontSizeExtraSmall, emojiBase) : qsTr("Unknown")
// message date
tertiaryText.text: last_message_date ? Functions.getDateTimeElapsed(last_message_date) : qsTr("Unknown")
tertiaryText.text: ( last_message_date ? Functions.getDateTimeElapsed(last_message_date) : qsTr("Unknown") ) + Emoji.emojify(last_message_status, tertiaryText.font.pixelSize)
unreadCount: unread_count
openMenuOnPressAndHold: true//chat_id != overviewPage.ownUserId

View file

@ -42,6 +42,7 @@ namespace {
const QString NOTIFICATION_SETTINGS("notification_settings");
const QString LAST_READ_INBOX_MESSAGE_ID("last_read_inbox_message_id");
const QString LAST_READ_OUTBOX_MESSAGE_ID("last_read_outbox_message_id");
const QString SENDING_STATE("sending_state");
const QString IS_CHANNEL("is_channel");
const QString _TYPE("@type");
}
@ -60,6 +61,7 @@ public:
RoleLastMessageSenderId,
RoleLastMessageDate,
RoleLastMessageText,
RoleLastMessageStatus,
RoleChatMemberStatus,
RoleIsChannel
};
@ -76,6 +78,7 @@ public:
qlonglong senderUserId() const;
qlonglong senderMessageDate() const;
QString senderMessageText() const;
QString senderMessageStatus() const;
bool isChannel() const;
bool isHidden() const;
bool updateUnreadCount(int unreadCount);
@ -176,6 +179,28 @@ QString ChatListModel::ChatData::senderMessageText() const
return FernschreiberUtils::getMessageShortText(lastMessage(CONTENT).toMap(), this->userInformation.value(ID).toLongLong() == senderUserId());
}
QString ChatListModel::ChatData::senderMessageStatus() const
{
if (isChannel() || this->userInformation.value(ID).toLongLong() != senderUserId() || this->userInformation.value(ID).toLongLong() == chatId) {
return "";
}
if (lastMessage(ID) == chatData.value(LAST_READ_OUTBOX_MESSAGE_ID)) {
return "  ✅";
} else {
QVariantMap lastMessage = chatData.value(LAST_MESSAGE).toMap();
if (lastMessage.contains(SENDING_STATE)) {
QVariantMap sendingState = lastMessage.value(SENDING_STATE).toMap();
if (sendingState.value(_TYPE).toString() == "messageSendingStatePending") {
return "  🕙";
} else {
return "  ❌";
}
} else {
return "  ☑️";
}
}
}
bool ChatListModel::ChatData::isChannel() const
{
return chatData.value(TYPE).toMap().value(IS_CHANNEL).toBool();
@ -226,6 +251,8 @@ QVector<int> ChatListModel::ChatData::updateLastMessage(const QVariantMap &messa
const qlonglong prevSenderUserId(senderUserId());
const qlonglong prevSenderMessageDate(senderMessageDate());
const QString prevSenderMessageText(senderMessageText());
const QString prevSenderMessageStatus(senderMessageStatus());
chatData.insert(LAST_MESSAGE, message);
@ -240,6 +267,9 @@ QVector<int> ChatListModel::ChatData::updateLastMessage(const QVariantMap &messa
if (prevSenderMessageText != senderMessageText()) {
changedRoles.append(RoleLastMessageText);
}
if (prevSenderMessageStatus != senderMessageStatus()) {
changedRoles.append(RoleLastMessageStatus);
}
return changedRoles;
}
@ -297,6 +327,7 @@ QHash<int,QByteArray> ChatListModel::roleNames() const
roles.insert(ChatData::RoleLastMessageSenderId, "last_message_sender_id");
roles.insert(ChatData::RoleLastMessageDate, "last_message_date");
roles.insert(ChatData::RoleLastMessageText, "last_message_text");
roles.insert(ChatData::RoleLastMessageStatus, "last_message_status");
roles.insert(ChatData::RoleChatMemberStatus, "chat_member_status");
roles.insert(ChatData::RoleIsChannel, "is_channel");
return roles;
@ -323,6 +354,7 @@ QVariant ChatListModel::data(const QModelIndex &index, int role) const
case ChatData::RoleLastMessageSenderId: return data->senderUserId();
case ChatData::RoleLastMessageText: return data->senderMessageText();
case ChatData::RoleLastMessageDate: return data->senderMessageDate();
case ChatData::RoleLastMessageStatus: return data->senderMessageStatus();
case ChatData::RoleChatMemberStatus: return data->memberStatus;
case ChatData::RoleIsChannel: return data->isChannel();
}