Show the time when we were invited on the invite page

Currently, this is something that's missing even in clients like Element
(!?!) I will sometimes miss when invites are sent - like when I'm
sleeping - and then when I start back up NeoChat I have no idea when
they tried to invite me. This can get worse on bigger timescales, like
when you go on vacation for a few days.
This commit is contained in:
Joshua Goins
2025-05-08 14:22:55 -04:00
parent d7c9bea783
commit 28c39292f7
3 changed files with 24 additions and 2 deletions

View File

@@ -16,6 +16,7 @@ ColumnLayout {
required property NeoChatRoom currentRoom
readonly property var invitingMember: currentRoom.member(currentRoom.invitingUserId())
readonly property string inviteTimestamp: root.currentRoom.inviteTimestamp.toLocaleString(Qt.locale(), Locale.ShortFormat)
spacing: Kirigami.Units.smallSpacing
@@ -39,7 +40,7 @@ ColumnLayout {
spacing: Kirigami.Units.smallSpacing
QQC2.Label {
text: i18nc("@info:label", "%1 has invited you to join", root.invitingMember.displayName)
text: i18nc("@info:label 'Username' has invited you to this room at 'timestamp'.", "%1 has invited you to this room at %2.", root.invitingMember.displayName, root.inviteTimestamp)
Layout.alignment: Qt.AlignHCenter
}
@@ -67,7 +68,7 @@ ColumnLayout {
}
QQC2.Label {
text: i18nc("@info:label", "This user is inviting you to chat.")
text: i18nc("@info:label This user invited you to chat at 'timestamp'", "This user invited you to chat at %1.", root.inviteTimestamp)
Layout.alignment: Qt.AlignHCenter
}

View File

@@ -124,6 +124,7 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS
updatePushNotificationState(u"m.push_rules"_s);
Q_EMIT canEncryptRoomChanged();
Q_EMIT inviteTimestampChanged();
},
Qt::SingleShotConnection);
connect(this, &Room::changed, this, [this] {
@@ -1665,6 +1666,15 @@ QString NeoChatRoom::invitingUserId() const
return event->senderId();
}
QDateTime NeoChatRoom::inviteTimestamp() const
{
auto event = currentState().get<RoomMemberEvent>(connection()->userId());
if (!event) {
return {};
}
return event->originTimestamp();
}
void NeoChatRoom::setRoomState(const QString &type, const QString &stateKey, const QByteArray &content)
{
setState(type, stateKey, QJsonDocument::fromJson(content).object());

View File

@@ -192,6 +192,11 @@ class NeoChatRoom : public Quotient::Room
*/
Q_PROPERTY(ChatBarCache *threadCache READ threadCache CONSTANT)
/**
* @brief When the current user was invited to the room.
*/
Q_PROPERTY(QDateTime inviteTimestamp READ inviteTimestamp NOTIFY inviteTimestampChanged)
public:
explicit NeoChatRoom(Quotient::Connection *connection, QString roomId, Quotient::JoinState joinState = {});
@@ -525,6 +530,11 @@ public:
*/
Q_INVOKABLE QString invitingUserId() const;
/**
* If we're invited to this room, the timestamp when we were invited in. Undefined in other cases.
*/
Q_INVOKABLE QDateTime inviteTimestamp() const;
/**
* @brief Return the cached file transfer information for the event.
*
@@ -621,6 +631,7 @@ Q_SIGNALS:
void maxRoomVersionChanged();
void extraEventLoaded(const QString &eventId);
void extraEventNotFound(const QString &eventId);
void inviteTimestampChanged();
/**
* @brief Request a message be shown to the user of the given type.