summaryrefslogtreecommitdiffstats
path: root/include/TimelineView.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/TimelineView.h')
-rw-r--r--include/TimelineView.h28
1 files changed, 20 insertions, 8 deletions
diff --git a/include/TimelineView.h b/include/TimelineView.h
index 7e44db46..af0e9386 100644
--- a/include/TimelineView.h
+++ b/include/TimelineView.h
@@ -19,6 +19,7 @@
#include <QLayout>
#include <QList>
+#include <QQueue>
#include <QScrollArea>
#include "Emote.h"
@@ -42,14 +43,18 @@ namespace events = matrix::events;
// but not yet confirmed by the homeserver through sync.
struct PendingMessage
{
+ matrix::events::MessageEventType ty;
int txn_id;
QString body;
+ QString filename;
QString event_id;
TimelineItem *widget;
- PendingMessage(int txn_id, QString body, QString event_id, TimelineItem *widget)
- : txn_id(txn_id)
+ PendingMessage(matrix::events::MessageEventType ty, int txn_id, QString body, QString filename, QString event_id, TimelineItem *widget)
+ : ty(ty)
+ , txn_id(txn_id)
, body(body)
+ , filename(filename)
, event_id(event_id)
, widget(widget)
{}
@@ -86,8 +91,8 @@ public:
// Add new events at the end of the timeline.
int addEvents(const Timeline &timeline);
- void addUserMessage(matrix::events::MessageEventType ty, const QString &msg, int txn_id);
- void addUserMessage(const QString &url, const QString &filename, int txn_id);
+ void addUserMessage(matrix::events::MessageEventType ty, const QString &msg);
+ void addUserMessage(const QString &url, const QString &filename);
void updatePendingMessage(int txn_id, QString event_id);
void scrollDown();
@@ -102,6 +107,11 @@ public slots:
// Whether or not the initial batch has been loaded.
bool hasLoaded() { return scroll_layout_->count() > 1 || isTimelineFinished; };
+ void handleFailedMessage(int txnid);
+
+private slots:
+ void sendNextPendingMessage();
+
signals:
void updateLastTimelineMessage(const QString &user, const DescInfo &info);
@@ -115,14 +125,15 @@ private:
// sender's name.
bool isSenderRendered(const QString &user_id, TimelineDirection direction);
- bool isPendingMessage(const QString &eventid,
- const QString &body,
+ bool isPendingMessage(const QString &txnid,
const QString &sender,
const QString &userid);
- void removePendingMessage(const QString &eventid, const QString &body);
+ void removePendingMessage(const QString &txnid);
bool isDuplicate(const QString &event_id) { return eventIds_.contains(event_id); };
+ void handleNewUserMessage(PendingMessage msg);
+
// Return nullptr if the event couldn't be parsed.
TimelineItem *parseMessageEvent(const QJsonObject &event, TimelineDirection direction);
@@ -162,6 +173,7 @@ private:
// The events currently rendered. Used for duplicate detection.
QMap<QString, bool> eventIds_;
- QList<PendingMessage> pending_msgs_;
+ QQueue<PendingMessage> pending_msgs_;
+ QList<PendingMessage> pending_sent_msgs_;
QSharedPointer<MatrixClient> client_;
};