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 required property NeoChatRoom currentRoom
readonly property var invitingMember: currentRoom.member(currentRoom.invitingUserId()) readonly property var invitingMember: currentRoom.member(currentRoom.invitingUserId())
readonly property string inviteTimestamp: root.currentRoom.inviteTimestamp.toLocaleString(Qt.locale(), Locale.ShortFormat)
spacing: Kirigami.Units.smallSpacing spacing: Kirigami.Units.smallSpacing
@@ -39,7 +40,7 @@ ColumnLayout {
spacing: Kirigami.Units.smallSpacing spacing: Kirigami.Units.smallSpacing
QQC2.Label { 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 Layout.alignment: Qt.AlignHCenter
} }
@@ -67,7 +68,7 @@ ColumnLayout {
} }
QQC2.Label { 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 Layout.alignment: Qt.AlignHCenter
} }

View File

@@ -124,6 +124,7 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS
updatePushNotificationState(u"m.push_rules"_s); updatePushNotificationState(u"m.push_rules"_s);
Q_EMIT canEncryptRoomChanged(); Q_EMIT canEncryptRoomChanged();
Q_EMIT inviteTimestampChanged();
}, },
Qt::SingleShotConnection); Qt::SingleShotConnection);
connect(this, &Room::changed, this, [this] { connect(this, &Room::changed, this, [this] {
@@ -1665,6 +1666,15 @@ QString NeoChatRoom::invitingUserId() const
return event->senderId(); 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) void NeoChatRoom::setRoomState(const QString &type, const QString &stateKey, const QByteArray &content)
{ {
setState(type, stateKey, QJsonDocument::fromJson(content).object()); 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) 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: public:
explicit NeoChatRoom(Quotient::Connection *connection, QString roomId, Quotient::JoinState joinState = {}); explicit NeoChatRoom(Quotient::Connection *connection, QString roomId, Quotient::JoinState joinState = {});
@@ -525,6 +530,11 @@ public:
*/ */
Q_INVOKABLE QString invitingUserId() const; 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. * @brief Return the cached file transfer information for the event.
* *
@@ -621,6 +631,7 @@ Q_SIGNALS:
void maxRoomVersionChanged(); void maxRoomVersionChanged();
void extraEventLoaded(const QString &eventId); void extraEventLoaded(const QString &eventId);
void extraEventNotFound(const QString &eventId); void extraEventNotFound(const QString &eventId);
void inviteTimestampChanged();
/** /**
* @brief Request a message be shown to the user of the given type. * @brief Request a message be shown to the user of the given type.