diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index 738fb37c..08cbd15b 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -268,7 +268,18 @@ InputBar::message(QString msg, MarkdownOverride useMarkdown)
text.format = "org.matrix.custom.html";
}
- if (!room->reply().isEmpty()) {
+ if (!room->edit().isEmpty()) {
+ if (!room->reply().isEmpty()) {
+ text.relations.relations.push_back(
+ {mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
+ room->resetReply();
+ }
+
+ text.relations.relations.push_back(
+ {mtx::common::RelationType::Replace, room->edit().toStdString()});
+ room->resetEdit();
+
+ } else if (!room->reply().isEmpty()) {
auto related = room->relatedInfo(room->reply());
QString body;
@@ -321,6 +332,11 @@ InputBar::emote(QString msg)
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
room->resetReply();
}
+ if (!room->edit().isEmpty()) {
+ emote.relations.relations.push_back(
+ {mtx::common::RelationType::Replace, room->edit().toStdString()});
+ room->resetEdit();
+ }
room->sendMessageEvent(emote, mtx::events::EventType::RoomMessage);
}
@@ -352,6 +368,11 @@ InputBar::image(const QString &filename,
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
room->resetReply();
}
+ if (!room->edit().isEmpty()) {
+ image.relations.relations.push_back(
+ {mtx::common::RelationType::Replace, room->edit().toStdString()});
+ room->resetEdit();
+ }
room->sendMessageEvent(image, mtx::events::EventType::RoomMessage);
}
@@ -378,6 +399,11 @@ InputBar::file(const QString &filename,
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
room->resetReply();
}
+ if (!room->edit().isEmpty()) {
+ file.relations.relations.push_back(
+ {mtx::common::RelationType::Replace, room->edit().toStdString()});
+ room->resetEdit();
+ }
room->sendMessageEvent(file, mtx::events::EventType::RoomMessage);
}
@@ -405,6 +431,11 @@ InputBar::audio(const QString &filename,
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
room->resetReply();
}
+ if (!room->edit().isEmpty()) {
+ audio.relations.relations.push_back(
+ {mtx::common::RelationType::Replace, room->edit().toStdString()});
+ room->resetEdit();
+ }
room->sendMessageEvent(audio, mtx::events::EventType::RoomMessage);
}
@@ -431,6 +462,11 @@ InputBar::video(const QString &filename,
{mtx::common::RelationType::InReplyTo, room->reply().toStdString()});
room->resetReply();
}
+ if (!room->edit().isEmpty()) {
+ video.relations.relations.push_back(
+ {mtx::common::RelationType::Replace, room->edit().toStdString()});
+ room->resetEdit();
+ }
room->sendMessageEvent(video, mtx::events::EventType::RoomMessage);
}
@@ -524,6 +560,8 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList &
[this](const QByteArray data, const QString &mime, const QString &fn) {
setUploading(true);
+ setText("");
+
auto payload = std::string(data.data(), data.size());
std::optional<mtx::crypto::EncryptedFile> encryptedFile;
if (cache::isRoomEncrypted(room->roomId().toStdString())) {
diff --git a/src/timeline/InputBar.h b/src/timeline/InputBar.h
index f173bbc0..696a0dd9 100644
--- a/src/timeline/InputBar.h
+++ b/src/timeline/InputBar.h
@@ -41,6 +41,7 @@ public slots:
QString text() const;
QString previousText();
QString nextText();
+ void setText(QString newText) { emit textChanged(newText); }
void send();
void paste(bool fromMouse);
@@ -58,6 +59,7 @@ private slots:
signals:
void insertText(QString text);
+ void textChanged(QString newText);
void uploadingChanged(bool value);
private:
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index dd4f8696..de43d5ea 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -1529,11 +1529,33 @@ TimelineModel::setEdit(QString newEdit)
if (ev) {
setReply(QString::fromStdString(
mtx::accessors::relations(*ev).reply_to().value_or("")));
- // input()->setText(mtx::accessors::body(*ev));
+
+ auto msgType = mtx::accessors::msg_type(*ev);
+ if (msgType == mtx::events::MessageType::Text ||
+ msgType == mtx::events::MessageType::Notice) {
+ input()->setText(relatedInfo(newEdit).quoted_body);
+ } else if (msgType == mtx::events::MessageType::Emote) {
+ input()->setText("/me " + relatedInfo(newEdit).quoted_body);
+ } else {
+ input()->setText("");
+ }
+ } else {
+ input()->setText("");
}
}
}
+void
+TimelineModel::resetEdit()
+{
+ if (!edit_.isEmpty()) {
+ edit_ = "";
+ emit editChanged(edit_);
+ input()->setText("");
+ resetReply();
+ }
+}
+
QString
TimelineModel::roomName() const
{
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 463d8705..0aec27a1 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -274,14 +274,7 @@ public slots:
}
QString edit() const { return edit_; }
void setEdit(QString newEdit);
- void resetEdit()
- {
- if (!edit_.isEmpty()) {
- edit_ = "";
- emit editChanged(edit_);
- resetReply();
- }
- }
+ void resetEdit();
void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; }
void clearTimeline() { events.clearTimeline(); }
void receivedSessionKey(const std::string &session_key)
|