From 146aaa87465765cd9d3153d95b0791c587902d62 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Sun, 6 Aug 2017 18:53:31 +0300 Subject: Display the most recent message instead of the topic closes #11 --- include/RoomInfoListItem.h | 16 ++++++++++++++-- include/RoomList.h | 1 + include/TimelineItem.h | 10 ++++++++++ include/TimelineView.h | 5 +++++ include/TimelineViewManager.h | 2 ++ 5 files changed, 32 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/RoomInfoListItem.h b/include/RoomInfoListItem.h index 8ead930b..af02126a 100644 --- a/include/RoomInfoListItem.h +++ b/include/RoomInfoListItem.h @@ -26,6 +26,12 @@ #include "RoomSettings.h" #include "RoomState.h" +struct DescInfo { + QString username; + QString body; + QString timestamp; +}; + class RoomInfoListItem : public QWidget { Q_OBJECT @@ -46,6 +52,7 @@ public: inline RoomState state() const; inline void setAvatar(const QImage &avatar_image); inline int unreadMessageCount() const; + inline void setDescriptionMessage(const DescInfo &info); signals: void clicked(const QString &room_id); @@ -71,8 +78,8 @@ private: QString roomId_; QString roomName_; - QString lastMessage_; - QString lastTimestamp_; + + DescInfo lastMsgInfo_; QPixmap roomAvatar_; @@ -107,3 +114,8 @@ inline void RoomInfoListItem::setAvatar(const QImage &img) roomAvatar_ = QPixmap::fromImage(img.scaled(IconSize, IconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); update(); } + +inline void RoomInfoListItem::setDescriptionMessage(const DescInfo &info) +{ + lastMsgInfo_ = info; +} diff --git a/include/RoomList.h b/include/RoomList.h index 417ed363..f548400d 100644 --- a/include/RoomList.h +++ b/include/RoomList.h @@ -49,6 +49,7 @@ public slots: void updateRoomAvatar(const QString &roomid, const QPixmap &img); void highlightSelectedRoom(const QString &room_id); void updateUnreadMessageCount(const QString &roomid, int count); + void updateRoomDescription(const QString &roomid, const DescInfo &info); private: void calculateUnreadMessageCount(); diff --git a/include/TimelineItem.h b/include/TimelineItem.h index 50a21df3..cc5b3da7 100644 --- a/include/TimelineItem.h +++ b/include/TimelineItem.h @@ -28,6 +28,7 @@ #include "Image.h" #include "MessageEvent.h" #include "Notice.h" +#include "RoomInfoListItem.h" #include "Text.h" namespace events = matrix::events; @@ -48,6 +49,7 @@ public: TimelineItem(ImageItem *img, const events::MessageEvent &e, QWidget *parent); void setUserAvatar(const QImage &pixmap); + inline DescInfo descriptionMessage() const; ~TimelineItem(); @@ -57,12 +59,15 @@ private: void generateBody(const QString &body); void generateBody(const QString &userid, const QString &color, const QString &body); void generateTimestamp(const QDateTime &time); + QString descriptiveTime(const QDateTime &then); void setupAvatarLayout(const QString &userName); void setupSimpleLayout(); QString replaceEmoji(const QString &body); + DescInfo descriptionMsg_; + QHBoxLayout *topLayout_; QVBoxLayout *sideLayout_; // Avatar or Timestamp QVBoxLayout *mainLayout_; // Header & Message body @@ -77,3 +82,8 @@ private: QLabel *userName_; QLabel *body_; }; + +inline DescInfo TimelineItem::descriptionMessage() const +{ + return descriptionMsg_; +} diff --git a/include/TimelineView.h b/include/TimelineView.h index f1860dbe..628b3e0d 100644 --- a/include/TimelineView.h +++ b/include/TimelineView.h @@ -29,6 +29,7 @@ #include "Image.h" #include "Notice.h" +#include "RoomInfoListItem.h" #include "Text.h" namespace msgs = matrix::events::messages; @@ -83,11 +84,15 @@ public slots: // Add old events at the top of the timeline. void addBackwardsEvents(const QString &room_id, const RoomMessages &msgs); +signals: + void updateLastTimelineMessage(const QString &user, const DescInfo &info); + private: void init(); void removePendingMessage(const events::MessageEvent &e); void addTimelineItem(TimelineItem *item, TimelineDirection direction); void updateLastSender(const QString &user_id, TimelineDirection direction); + void notifyForLastEvent(); // Used to determine whether or not we should prefix a message with the sender's name. bool isSenderRendered(const QString &user_id, TimelineDirection direction); diff --git a/include/TimelineViewManager.h b/include/TimelineViewManager.h index c5b37542..64140e3a 100644 --- a/include/TimelineViewManager.h +++ b/include/TimelineViewManager.h @@ -23,6 +23,7 @@ #include #include "MatrixClient.h" +#include "RoomInfoListItem.h" #include "Sync.h" #include "TimelineView.h" @@ -50,6 +51,7 @@ public: signals: void unreadMessages(QString roomid, int count); + void updateRoomsLastMessage(const QString &user, const DescInfo &info); public slots: void setHistoryView(const QString &room_id); -- cgit 1.5.1