Port to Integral

This commit is contained in:
Tobias Fella
2025-03-22 17:10:33 +01:00
parent f153e57fdb
commit 073e756364
44 changed files with 3212 additions and 3526 deletions

View File

@@ -2,14 +2,15 @@
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
#include "chatbarcache.h"
#include "chatdocumenthandler.h"
#include <Quotient/roommember.h>
#include "chatdocumenthandler.h"
#include "eventhandler.h"
#include "models/actionsmodel.h"
// #include "chatdocumenthandler.h"
// #include "eventhandler.h"
// #include "models/actionsmodel.h"
#include "neochatroom.h"
#include "texthandler.h"
// #include "texthandler.h"
using namespace Qt::StringLiterals;
@@ -88,7 +89,7 @@ void ChatBarCache::setReplyId(const QString &replyId)
m_relationType = Reply;
}
m_attachmentPath = QString();
delete m_relationContentModel;
// delete m_relationContentModel;
Q_EMIT relationIdChanged(oldEventId, m_relationId);
Q_EMIT attachmentPathChanged();
}
@@ -118,27 +119,27 @@ void ChatBarCache::setEditId(const QString &editId)
m_relationType = Edit;
}
m_attachmentPath = QString();
delete m_relationContentModel;
// delete m_relationContentModel;
Q_EMIT relationIdChanged(oldEventId, m_relationId);
Q_EMIT attachmentPathChanged();
}
Quotient::RoomMember ChatBarCache::relationAuthor() const
{
if (parent() == nullptr) {
qWarning() << "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation.";
return {};
}
auto room = dynamic_cast<NeoChatRoom *>(parent());
if (room == nullptr) {
qWarning() << "ChatBarCache created with incorrect parent, a NeoChatRoom must be set as the parent on creation.";
return {};
}
if (m_relationId.isEmpty()) {
return room->member(QString());
}
return room->member((*room->findInTimeline(m_relationId))->senderId());
}
// Quotient::RoomMember ChatBarCache::relationAuthor() const
// {
// if (parent() == nullptr) {
// qWarning() << "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation.";
// return {};
// }
// auto room = dynamic_cast<NeoChatRoom *>(parent());
// if (room == nullptr) {
// qWarning() << "ChatBarCache created with incorrect parent, a NeoChatRoom must be set as the parent on creation.";
// return {};
// }
// if (m_relationId.isEmpty()) {
// return room->member(QString());
// }
// return room->member((*room->findInTimeline(m_relationId))->senderId());
// }
QString ChatBarCache::relationMessage() const
{
@@ -155,33 +156,33 @@ QString ChatBarCache::relationMessage() const
return {};
}
if (auto event = room->findInTimeline(m_relationId); event != room->historyEdge()) {
return EventHandler::markdownBody(&**event);
}
// if (auto event = room->findInTimeline(m_relationId); event != room->historyEdge()) {
// return EventHandler::markdownBody(&**event);
// }
return {};
}
MessageContentModel *ChatBarCache::relationEventContentModel()
{
if (parent() == nullptr) {
qWarning() << "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation.";
return nullptr;
}
if (m_relationId.isEmpty()) {
return nullptr;
}
if (m_relationContentModel != nullptr) {
return m_relationContentModel;
}
auto room = dynamic_cast<NeoChatRoom *>(parent());
if (room == nullptr) {
qWarning() << "ChatBarCache created with incorrect parent, a NeoChatRoom must be set as the parent on creation.";
return nullptr;
}
m_relationContentModel = new MessageContentModel(room, m_relationId, true);
return m_relationContentModel;
}
// MessageContentModel *ChatBarCache::relationEventContentModel()
// {
// if (parent() == nullptr) {
// qWarning() << "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation.";
// return nullptr;
// }
// if (m_relationId.isEmpty()) {
// return nullptr;
// }
// if (m_relationContentModel != nullptr) {
// return m_relationContentModel;
// }
//
// auto room = dynamic_cast<NeoChatRoom *>(parent());
// if (room == nullptr) {
// qWarning() << "ChatBarCache created with incorrect parent, a NeoChatRoom must be set as the parent on creation.";
// return nullptr;
// }
// m_relationContentModel = new MessageContentModel(room, m_relationId, true);
// return m_relationContentModel;
// }
bool ChatBarCache::isThreaded() const
{
@@ -215,7 +216,7 @@ void ChatBarCache::setAttachmentPath(const QString &attachmentPath)
m_attachmentPath = attachmentPath;
m_relationType = None;
const auto oldEventId = std::exchange(m_relationId, QString());
delete m_relationContentModel;
// delete m_relationContentModel;
Q_EMIT attachmentPathChanged();
Q_EMIT relationIdChanged(oldEventId, m_relationId);
}
@@ -225,7 +226,7 @@ void ChatBarCache::clearRelations()
const auto oldEventId = std::exchange(m_relationId, QString());
const auto oldThreadId = std::exchange(m_threadId, QString());
m_attachmentPath = QString();
delete m_relationContentModel;
// delete m_relationContentModel;
Q_EMIT relationIdChanged(oldEventId, m_relationId);
Q_EMIT threadIdChanged(oldThreadId, m_threadId);
Q_EMIT attachmentPathChanged();
@@ -238,7 +239,7 @@ QList<Mention> *ChatBarCache::mentions()
void ChatBarCache::updateMentions(QQuickTextDocument *document, ChatDocumentHandler *documentHandler)
{
documentHandler->setDocument(document);
// documentHandler->setDocument(document);
if (parent() == nullptr) {
qWarning() << "ChatBarCache created with no parent, a NeoChatRoom must be set as the parent on creation.";
@@ -253,35 +254,35 @@ void ChatBarCache::updateMentions(QQuickTextDocument *document, ChatDocumentHand
return;
}
if (auto event = room->findInTimeline(m_relationId); event != room->historyEdge()) {
if (const auto &roomMessageEvent = &*event->viewAs<Quotient::RoomMessageEvent>()) {
// Replaces the mentions that are baked into the HTML but plaintext in the original markdown
const QRegularExpression re(uR"lit(<a\shref="https:\/\/matrix.to\/#\/([\S]*)"\s?>([\S]*)<\/a>)lit"_s);
m_mentions.clear();
int linkSize = 0;
auto matches = re.globalMatch(EventHandler::rawMessageBody(*roomMessageEvent));
while (matches.hasNext()) {
const QRegularExpressionMatch match = matches.next();
if (match.hasMatch()) {
const QString id = match.captured(1);
const QString name = match.captured(2);
const int position = match.capturedStart(0) - linkSize;
const int end = position + name.length();
linkSize += match.capturedLength(0) - name.length();
QTextCursor cursor(documentHandler->document()->textDocument());
cursor.setPosition(position);
cursor.setPosition(end, QTextCursor::KeepAnchor);
cursor.setKeepPositionOnInsert(true);
m_mentions.push_back(Mention{.cursor = cursor, .text = name, .start = position, .position = end, .id = id});
}
}
}
}
// if (auto event = room->findInTimeline(m_relationId); event != room->historyEdge()) {
// if (const auto &roomMessageEvent = &*event->viewAs<Quotient::RoomMessageEvent>()) {
// // Replaces the mentions that are baked into the HTML but plaintext in the original markdown
// const QRegularExpression re(uR"lit(<a\shref="https:\/\/matrix.to\/#\/([\S]*)"\s?>([\S]*)<\/a>)lit"_s);
//
// m_mentions.clear();
//
// int linkSize = 0;
// auto matches = re.globalMatch(EventHandler::rawMessageBody(*roomMessageEvent));
// while (matches.hasNext()) {
// const QRegularExpressionMatch match = matches.next();
// if (match.hasMatch()) {
// const QString id = match.captured(1);
// const QString name = match.captured(2);
//
// const int position = match.capturedStart(0) - linkSize;
// const int end = position + name.length();
// linkSize += match.capturedLength(0) - name.length();
//
// QTextCursor cursor(documentHandler->document()->textDocument());
// cursor.setPosition(position);
// cursor.setPosition(end, QTextCursor::KeepAnchor);
// cursor.setKeepPositionOnInsert(true);
//
// m_mentions.push_back(Mention{.cursor = cursor, .text = name, .start = position, .position = end, .id = id});
// }
// }
// }
// }
}
QString ChatBarCache::savedText() const
@@ -308,37 +309,37 @@ void ChatBarCache::postMessage()
return;
}
const auto result = ActionsModel::handleAction(room, this);
if (!result.second.has_value()) {
return;
}
// const auto result = ActionsModel::handleAction(room, this);
// if (!result.second.has_value()) {
// return;
// }
TextHandler textHandler;
textHandler.setData(*std::get<std::optional<QString>>(result));
const auto sendText = textHandler.handleSendText();
if (sendText.length() == 0) {
return;
}
// TextHandler textHandler;
// textHandler.setData(*std::get<std::optional<QString>>(result));
// const auto sendText = textHandler.handleSendText();
//
// if (sendText.length() == 0) {
// return;
// }
bool isReply = !replyId().isEmpty();
const auto replyIt = room->findInTimeline(replyId());
if (replyIt == room->historyEdge()) {
isReply = false;
}
// const auto replyIt = room->findInTimeline(replyId());
// if (replyIt == room->historyEdge()) {
// isReply = false;
// }
auto content = std::make_unique<Quotient::EventContent::TextContent>(sendText, u"text/html"_s);
std::optional<Quotient::EventRelation> relatesTo = std::nullopt;
// auto content = std::make_unique<Quotient::EventContent::TextContent>(sendText, u"text/html"_s);
// std::optional<Quotient::EventRelation> relatesTo = std::nullopt;
//
// if (!threadId().isEmpty()) {
// relatesTo = Quotient::EventRelation::replyInThread(threadId(), !isReply, isReply ? replyId() : threadId());
// } else if (!editId().isEmpty()) {
// relatesTo = Quotient::EventRelation::replace(editId());
// } else if (isReply) {
// relatesTo = Quotient::EventRelation::replyTo(replyId());
// }
if (!threadId().isEmpty()) {
relatesTo = Quotient::EventRelation::replyInThread(threadId(), !isReply, isReply ? replyId() : threadId());
} else if (!editId().isEmpty()) {
relatesTo = Quotient::EventRelation::replace(editId());
} else if (isReply) {
relatesTo = Quotient::EventRelation::replyTo(replyId());
}
room->post<Quotient::RoomMessageEvent>(text(), *std::get<std::optional<Quotient::RoomMessageEvent::MsgType>>(result), std::move(content), relatesTo);
// room->post<Quotient::RoomMessageEvent>(text(), *std::get<std::optional<Quotient::RoomMessageEvent::MsgType>>(result), std::move(content), relatesTo);
clearCache();
}