mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Reimplement sending basic text messages
This commit is contained in:
parent
a1c97fc8d6
commit
a7595eab5a
3 changed files with 69 additions and 2 deletions
|
@ -7,6 +7,9 @@
|
|||
#include <QDate>
|
||||
#include <QHash>
|
||||
|
||||
#include "Logging.h"
|
||||
#include "MatrixClient.h"
|
||||
|
||||
namespace qml_mtx_events {
|
||||
Q_NAMESPACE
|
||||
|
||||
|
@ -110,6 +113,8 @@ public:
|
|||
Q_INVOKABLE void viewRawMessage(QString id) const;
|
||||
|
||||
void addEvents(const mtx::responses::Timeline &events);
|
||||
template<class T>
|
||||
void sendMessage(const T &msg);
|
||||
|
||||
public slots:
|
||||
void fetchHistory();
|
||||
|
@ -121,6 +126,8 @@ private slots:
|
|||
|
||||
signals:
|
||||
void oldMessagesRetrieved(const mtx::responses::Messages &res);
|
||||
void messageFailed(const std::string txn_id);
|
||||
void messageSent(const std::string txn_id, std::string event_id);
|
||||
|
||||
private:
|
||||
DecryptionResult decryptEvent(
|
||||
|
@ -139,3 +146,25 @@ private:
|
|||
|
||||
QHash<QString, QColor> userColors;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
void
|
||||
TimelineModel::sendMessage(const T &msg)
|
||||
{
|
||||
auto txn_id = http::client()->generate_txn_id();
|
||||
http::client()->send_room_message<T, mtx::events::EventType::RoomMessage>(
|
||||
room_id_.toStdString(),
|
||||
txn_id,
|
||||
msg,
|
||||
[this, txn_id](const mtx::responses::EventId &res, mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
const int status_code = static_cast<int>(err->status_code);
|
||||
nhlog::net()->warn("[{}] failed to send message: {} {}",
|
||||
txn_id,
|
||||
err->matrix_error.error,
|
||||
status_code);
|
||||
emit messageFailed(txn_id);
|
||||
}
|
||||
emit messageSent(txn_id, res.event_id.to_string());
|
||||
});
|
||||
}
|
||||
|
|
|
@ -62,3 +62,41 @@ TimelineViewManager::initWithMessages(const std::map<QString, mtx::responses::Ti
|
|||
models.value(e.first)->addEvents(e.second);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TimelineViewManager::queueTextMessage(const QString &msg)
|
||||
{
|
||||
mtx::events::msg::Text text = {};
|
||||
text.body = msg.trimmed().toStdString();
|
||||
text.format = "org.matrix.custom.html";
|
||||
text.formatted_body = utils::markdownToHtml(msg).toStdString();
|
||||
|
||||
if (timeline_)
|
||||
timeline_->sendMessage(text);
|
||||
}
|
||||
|
||||
void
|
||||
TimelineViewManager::queueReplyMessage(const QString &reply, const RelatedInfo &related)
|
||||
{
|
||||
mtx::events::msg::Text text = {};
|
||||
|
||||
QString body;
|
||||
bool firstLine = true;
|
||||
for (const auto &line : related.quoted_body.splitRef("\n")) {
|
||||
if (firstLine) {
|
||||
firstLine = false;
|
||||
body = QString("> <%1> %2\n").arg(related.quoted_user).arg(line);
|
||||
} else {
|
||||
body = QString("%1\n> %2\n").arg(body).arg(line);
|
||||
}
|
||||
}
|
||||
|
||||
text.body = QString("%1\n%2").arg(body).arg(reply).toStdString();
|
||||
text.format = "org.matrix.custom.html";
|
||||
text.formatted_body =
|
||||
utils::getFormattedQuoteBody(related, utils::markdownToHtml(reply)).toStdString();
|
||||
text.relates_to.in_reply_to.event_id = related.related_event;
|
||||
|
||||
if (timeline_)
|
||||
timeline_->sendMessage(text);
|
||||
}
|
||||
|
|
|
@ -46,8 +46,8 @@ public slots:
|
|||
|
||||
void setHistoryView(const QString &room_id);
|
||||
|
||||
void queueTextMessage(const QString &msg) {}
|
||||
void queueReplyMessage(const QString &reply, const RelatedInfo &related) {}
|
||||
void queueTextMessage(const QString &msg);
|
||||
void queueReplyMessage(const QString &reply, const RelatedInfo &related);
|
||||
void queueEmoteMessage(const QString &msg) {}
|
||||
void queueImageMessage(const QString &roomid,
|
||||
const QString &filename,
|
||||
|
|
Loading…
Reference in a new issue