merge master into reactions

This commit is contained in:
Joseph Donofry 2020-05-07 20:53:24 -04:00
parent 7beaf868ef
commit a1661f7006
No known key found for this signature in database
GPG Key ID: E8A1D78EF044B0CB
10 changed files with 74 additions and 6 deletions

View File

@ -3,7 +3,8 @@ import QtQuick.Controls 2.3
AbstractButton {
property string image: undefined
width: 16
height: 16
id: button
Image {

View File

@ -71,7 +71,18 @@ MouseArea {
Layout.preferredHeight: 16
width: 16
}
ImageButton {
visible: timelineSettings.buttons
Layout.alignment: Qt.AlignRight | Qt.AlignTop
Layout.preferredHeight: 16
width: 16
id: reactButton
hoverEnabled: true
image: ":/icons/icons/ui/smile.png"
ToolTip.visible: hovered
ToolTip.text: qsTr("React")
onClicked: chat.model.reactAction(model.id)
}
ImageButton {
visible: timelineSettings.buttons
Layout.alignment: Qt.AlignRight | Qt.AlignTop

View File

@ -48,7 +48,10 @@ Page {
property string eventId
property int eventType
property bool isEncrypted
MenuItem {
text: qsTr("React")
onClicked: chat.model.reactAction(messageContextMenu.eventId)
}
MenuItem {
text: qsTr("Reply")
onClicked: chat.model.replyAction(messageContextMenu.eventId)

View File

@ -2,6 +2,9 @@ import QtQuick 2.5
import QtQuick.Controls 2.1
Label {
id: pillComponent
property color userColor: "red"
color: colors.brightText
horizontalAlignment: Text.AlignHCenter
@ -10,6 +13,6 @@ Label {
background: Rectangle {
radius: parent.height / 2
color: colors.dark
color: Qt.rgba(userColor.r, userColor.g, userColor.b, 0.2)
}
}

View File

@ -582,6 +582,14 @@ ChatPage::resetUI()
showUnreadMessageNotification(0);
}
void
ChatPage::reactMessage(const QString &id)
{
view_manager_->queueReactionMessage(current_room_,
id,
"👀");
}
void
ChatPage::focusMessageInput()
{

View File

@ -85,6 +85,7 @@ public:
//! Show the room/group list (if it was visible).
void showSideBars();
void initiateLogout();
void reactMessage(const QString &eventId);
void focusMessageInput();
public slots:

View File

@ -914,6 +914,13 @@ TimelineModel::decryptEvent(const mtx::events::EncryptedEvent<mtx::events::msg::
return {dummy, false};
}
void
TimelineModel::reactAction(QString id)
{
setReaction(id);
ChatPage::instance()->reactMessage(id);
}
void
TimelineModel::replyAction(QString id)
{

View File

@ -126,6 +126,7 @@ class TimelineModel : public QAbstractListModel
int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
Q_PROPERTY(std::vector<QString> typingUsers READ typingUsers WRITE updateTypingUsers NOTIFY
typingUsersChanged)
Q_PROPERTY(QString reaction READ reaction WRITE setReaction NOTIFY reactionChanged RESET resetReaction)
Q_PROPERTY(QString reply READ reply WRITE setReply NOTIFY replyChanged RESET resetReply)
Q_PROPERTY(
bool paginationInProgress READ paginationInProgress NOTIFY paginationInProgressChanged)
@ -187,6 +188,7 @@ public:
Q_INVOKABLE void viewRawMessage(QString id) const;
Q_INVOKABLE void viewDecryptedRawMessage(QString id) const;
Q_INVOKABLE void openUserProfile(QString userid) const;
Q_INVOKABLE void reactAction(QString id);
Q_INVOKABLE void replyAction(QString id);
Q_INVOKABLE void readReceiptsAction(QString id) const;
Q_INVOKABLE void redactEvent(QString id);
@ -215,7 +217,21 @@ public slots:
}
std::vector<QString> typingUsers() const { return typingUsers_; }
bool paginationInProgress() const { return m_paginationInProgress; }
QString reaction() const { return reaction_; }
void setReaction(QString reaction)
{
if (reaction_ != reaction) {
reaction_ = reaction;
emit reactionChanged(reaction_);
}
}
void resetReaction()
{
if (!reaction_.isEmpty()) {
reaction_ = "";
emit reactionChanged(reaction_);
}
}
QString reply() const { return reply_; }
void setReply(QString newReply)
{
@ -252,6 +268,7 @@ signals:
void newEncryptedImage(mtx::crypto::EncryptedFile encryptionInfo);
void eventFetched(QString requestingEvent, mtx::events::collections::TimelineEvents event);
void typingUsersChanged(std::vector<QString> users);
void reactionChanged(QString reaction);
void replyChanged(QString reply);
void paginationInProgressChanged(const bool);
@ -285,6 +302,7 @@ private:
bool m_paginationInProgress = false;
QString currentId;
QString reaction_;
QString reply_;
std::vector<QString> typingUsers_;

View File

@ -282,6 +282,20 @@ TimelineViewManager::queueEmoteMessage(const QString &msg)
timeline_->sendMessage(emote);
}
void
TimelineViewManager::queueReactionMessage(const QString &roomId,
const QString &reactedEvent,
const QString &reactionKey)
{
mtx::events::msg::Reaction reaction;
reaction.relates_to.rel_type = mtx::common::RelationType::Annotation;
reaction.relates_to.event_id = reactedEvent.toStdString();
reaction.relates_to.key = reactionKey.toStdString();
auto model = models.value(roomId);
model->sendMessage(reaction);
}
void
TimelineViewManager::queueImageMessage(const QString &roomid,
const QString &filename,

View File

@ -55,7 +55,9 @@ public slots:
void setHistoryView(const QString &room_id);
void updateColorPalette();
void queueReactionMessage(const QString &roomId,
const QString &reactedEvent,
const QString &reaction);
void queueTextMessage(const QString &msg);
void queueEmoteMessage(const QString &msg);
void queueImageMessage(const QString &roomid,