parent
b21942a3e3
commit
fdb76bb5c1
13 changed files with 210 additions and 101 deletions
|
|
@ -80,6 +80,7 @@ private slots:
|
|||
private:
|
||||
QString calculateFileSize(int nbytes) const;
|
||||
void openUrl();
|
||||
void init();
|
||||
|
||||
QUrl url_;
|
||||
QString text_;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public:
|
|||
void downloadFile(const QString &event_id, const QUrl &url);
|
||||
void messages(const QString &room_id, const QString &from_token, int limit = 30) noexcept;
|
||||
void uploadImage(const QString &roomid, const QString &filename);
|
||||
void uploadFile(const QString &roomid, const QString &filename);
|
||||
void joinRoom(const QString &roomIdOrAlias);
|
||||
void leaveRoom(const QString &roomId);
|
||||
void sendTypingNotification(const QString &roomid, int timeoutInMillis = 20000);
|
||||
|
|
@ -92,6 +93,7 @@ signals:
|
|||
const QString &token);
|
||||
void versionSuccess();
|
||||
void imageUploaded(const QString &roomid, const QString &filename, const QString &url);
|
||||
void fileUploaded(const QString &roomid, const QString &filename, const QString &url);
|
||||
|
||||
void roomAvatarRetrieved(const QString &roomid, const QPixmap &img);
|
||||
void userAvatarRetrieved(const QString &userId, const QImage &img);
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ signals:
|
|||
void sendTextMessage(QString msg);
|
||||
void sendEmoteMessage(QString msg);
|
||||
void uploadImage(QString filename);
|
||||
void uploadFile(QString filename);
|
||||
void sendJoinRoomRequest(const QString &room);
|
||||
|
||||
void startedTyping();
|
||||
|
|
|
|||
|
|
@ -17,12 +17,14 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QPainter>
|
||||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include "AvatarProvider.h"
|
||||
#include "Emote.h"
|
||||
#include "File.h"
|
||||
#include "Image.h"
|
||||
|
|
@ -30,6 +32,7 @@
|
|||
#include "Notice.h"
|
||||
#include "RoomInfoListItem.h"
|
||||
#include "Text.h"
|
||||
#include "TimelineViewManager.h"
|
||||
|
||||
class ImageItem;
|
||||
class FileItem;
|
||||
|
|
@ -61,6 +64,7 @@ public:
|
|||
QWidget *parent = 0);
|
||||
// m.image
|
||||
TimelineItem(ImageItem *item, const QString &userid, bool withSender, QWidget *parent = 0);
|
||||
TimelineItem(FileItem *item, const QString &userid, bool withSender, QWidget *parent = 0);
|
||||
|
||||
TimelineItem(ImageItem *img,
|
||||
const events::MessageEvent<msgs::Image> &e,
|
||||
|
|
@ -83,6 +87,12 @@ protected:
|
|||
private:
|
||||
void init();
|
||||
|
||||
template<class Widget>
|
||||
void setupLocalWidgetLayout(Widget *widget,
|
||||
const QString &userid,
|
||||
const QString &msgDescription,
|
||||
bool withSender);
|
||||
|
||||
void generateBody(const QString &body);
|
||||
void generateBody(const QString &userid, const QString &body);
|
||||
void generateTimestamp(const QDateTime &time);
|
||||
|
|
@ -110,3 +120,36 @@ private:
|
|||
QLabel *userName_;
|
||||
QLabel *body_;
|
||||
};
|
||||
|
||||
template<class Widget>
|
||||
void
|
||||
TimelineItem::setupLocalWidgetLayout(Widget *widget,
|
||||
const QString &userid,
|
||||
const QString &msgDescription,
|
||||
bool withSender)
|
||||
{
|
||||
auto displayName = TimelineViewManager::displayName(userid);
|
||||
auto timestamp = QDateTime::currentDateTime();
|
||||
|
||||
descriptionMsg_ = {
|
||||
"You", userid, QString(" %1").arg(msgDescription), descriptiveTime(timestamp)};
|
||||
|
||||
generateTimestamp(timestamp);
|
||||
|
||||
auto widgetLayout = new QHBoxLayout();
|
||||
widgetLayout->setContentsMargins(0, 5, 0, 0);
|
||||
widgetLayout->addWidget(widget);
|
||||
widgetLayout->addStretch(1);
|
||||
|
||||
if (withSender) {
|
||||
generateBody(displayName, "");
|
||||
setupAvatarLayout(displayName);
|
||||
mainLayout_->addLayout(headerLayout_);
|
||||
|
||||
AvatarProvider::resolve(userid, this);
|
||||
} else {
|
||||
setupSimpleLayout();
|
||||
}
|
||||
|
||||
mainLayout_->addLayout(widgetLayout);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,26 +17,28 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <QApplication>
|
||||
#include <QLayout>
|
||||
#include <QList>
|
||||
#include <QQueue>
|
||||
#include <QScrollArea>
|
||||
#include <QSettings>
|
||||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include "Emote.h"
|
||||
#include "File.h"
|
||||
#include "Image.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "MessageEvent.h"
|
||||
#include "Notice.h"
|
||||
#include "Text.h"
|
||||
#include "TimelineItem.h"
|
||||
|
||||
class FloatingButton;
|
||||
class MatrixClient;
|
||||
class RoomMessages;
|
||||
class ScrollBar;
|
||||
class Timeline;
|
||||
class TimelineItem;
|
||||
struct DescInfo;
|
||||
|
||||
namespace msgs = matrix::events::messages;
|
||||
|
|
@ -102,6 +104,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);
|
||||
|
||||
template<class Widget, events::MessageEventType MsgType>
|
||||
void addUserMessage(const QString &url, const QString &filename);
|
||||
void updatePendingMessage(int txn_id, QString event_id);
|
||||
void scrollDown();
|
||||
|
|
@ -193,3 +197,28 @@ private:
|
|||
QList<PendingMessage> pending_sent_msgs_;
|
||||
QSharedPointer<MatrixClient> client_;
|
||||
};
|
||||
|
||||
template<class Widget, events::MessageEventType MsgType>
|
||||
void
|
||||
TimelineView::addUserMessage(const QString &url, const QString &filename)
|
||||
{
|
||||
QSettings settings;
|
||||
auto user_id = settings.value("auth/user_id").toString();
|
||||
auto with_sender = lastSender_ != user_id;
|
||||
|
||||
auto widget = new Widget(client_, url, filename, this);
|
||||
|
||||
TimelineItem *view_item = new TimelineItem(widget, user_id, with_sender, scroll_widget_);
|
||||
scroll_layout_->addWidget(view_item);
|
||||
|
||||
lastMessageDirection_ = TimelineDirection::Bottom;
|
||||
|
||||
QApplication::processEvents();
|
||||
|
||||
lastSender_ = user_id;
|
||||
|
||||
int txn_id = client_->incrementTransactionId();
|
||||
|
||||
PendingMessage message(MsgType, txn_id, url, filename, "", view_item);
|
||||
handleNewUserMessage(message);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ public slots:
|
|||
void queueTextMessage(const QString &msg);
|
||||
void queueEmoteMessage(const QString &msg);
|
||||
void queueImageMessage(const QString &roomid, const QString &filename, const QString &url);
|
||||
void queueFileMessage(const QString &roomid, const QString &filename, const QString &url);
|
||||
|
||||
private slots:
|
||||
void messageSent(const QString &eventid, const QString &roomid, int txnid);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue