mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +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 <QDate>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
|
|
||||||
|
#include "Logging.h"
|
||||||
|
#include "MatrixClient.h"
|
||||||
|
|
||||||
namespace qml_mtx_events {
|
namespace qml_mtx_events {
|
||||||
Q_NAMESPACE
|
Q_NAMESPACE
|
||||||
|
|
||||||
|
@ -110,6 +113,8 @@ public:
|
||||||
Q_INVOKABLE void viewRawMessage(QString id) const;
|
Q_INVOKABLE void viewRawMessage(QString id) const;
|
||||||
|
|
||||||
void addEvents(const mtx::responses::Timeline &events);
|
void addEvents(const mtx::responses::Timeline &events);
|
||||||
|
template<class T>
|
||||||
|
void sendMessage(const T &msg);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void fetchHistory();
|
void fetchHistory();
|
||||||
|
@ -121,6 +126,8 @@ private slots:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void oldMessagesRetrieved(const mtx::responses::Messages &res);
|
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:
|
private:
|
||||||
DecryptionResult decryptEvent(
|
DecryptionResult decryptEvent(
|
||||||
|
@ -139,3 +146,25 @@ private:
|
||||||
|
|
||||||
QHash<QString, QColor> userColors;
|
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);
|
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 setHistoryView(const QString &room_id);
|
||||||
|
|
||||||
void queueTextMessage(const QString &msg) {}
|
void queueTextMessage(const QString &msg);
|
||||||
void queueReplyMessage(const QString &reply, const RelatedInfo &related) {}
|
void queueReplyMessage(const QString &reply, const RelatedInfo &related);
|
||||||
void queueEmoteMessage(const QString &msg) {}
|
void queueEmoteMessage(const QString &msg) {}
|
||||||
void queueImageMessage(const QString &roomid,
|
void queueImageMessage(const QString &roomid,
|
||||||
const QString &filename,
|
const QString &filename,
|
||||||
|
|
Loading…
Reference in a new issue