parent
4a912a2dff
commit
4e1c8dd663
7 changed files with 131 additions and 61 deletions
|
|
@ -40,6 +40,7 @@ public:
|
|||
void initialSync() noexcept;
|
||||
void sync() noexcept;
|
||||
void sendRoomMessage(matrix::events::MessageEventType ty,
|
||||
int txnId,
|
||||
const QString &roomid,
|
||||
const QString &msg,
|
||||
const QString &url = "") noexcept;
|
||||
|
|
@ -61,7 +62,7 @@ public:
|
|||
|
||||
QUrl getHomeServer() { return server_; };
|
||||
int transactionId() { return txn_id_; };
|
||||
void incrementTransactionId() { txn_id_ += 1; };
|
||||
int incrementTransactionId() { return ++txn_id_; }; // It is incredibly important that it's incremented first.
|
||||
|
||||
void reset() noexcept;
|
||||
|
||||
|
|
@ -103,6 +104,7 @@ signals:
|
|||
void syncFailed(const QString &msg);
|
||||
void joinFailed(const QString &msg);
|
||||
void messageSent(const QString &event_id, const QString &roomid, const int txn_id);
|
||||
void messageSendFailed(const QString &roomid, const int txn_id);
|
||||
void emoteSent(const QString &event_id, const QString &roomid, const int txn_id);
|
||||
void messagesRetrieved(const QString &room_id, const RoomMessages &msgs);
|
||||
void joinedRoom(const QString &room_id);
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
#include <QSharedPointer>
|
||||
#include <QStackedWidget>
|
||||
|
||||
#include "MessageEvent.h"
|
||||
|
||||
class JoinedRoom;
|
||||
class MatrixClient;
|
||||
class RoomInfoListItem;
|
||||
|
|
@ -61,12 +63,13 @@ signals:
|
|||
|
||||
public slots:
|
||||
void setHistoryView(const QString &room_id);
|
||||
void sendTextMessage(const QString &msg);
|
||||
void sendEmoteMessage(const QString &msg);
|
||||
void sendImageMessage(const QString &roomid, const QString &filename, const QString &url);
|
||||
void queueTextMessage(const QString &msg);
|
||||
void queueEmoteMessage(const QString &msg);
|
||||
void queueImageMessage(const QString &roomid, const QString &filename, const QString &url);
|
||||
|
||||
private slots:
|
||||
void messageSent(const QString &eventid, const QString &roomid, int txnid);
|
||||
void messageSendFailed(const QString &roomid, int txnid);
|
||||
|
||||
private:
|
||||
QString active_room_;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue