Show custom delegate for in-room user verification

This is independent of the in-room verification actually working, but prevents a fallback from appearing
This commit is contained in:
Tobias Fella
2024-03-23 20:56:30 +01:00
parent c3fd2428a2
commit ab4519dedd
3 changed files with 66 additions and 52 deletions

View File

@@ -51,6 +51,7 @@ public:
LinkPreview, /**< A preview of a URL in the message. */ LinkPreview, /**< A preview of a URL in the message. */
LinkPreviewLoad, /**< A loading dialog for a link preview. */ LinkPreviewLoad, /**< A loading dialog for a link preview. */
Edit, /**< A text edit for editing a message. */ Edit, /**< A text edit for editing a message. */
Verification, /**< A user verification session start message. */
Other, /**< Anything that cannot be classified as another type. */ Other, /**< Anything that cannot be classified as another type. */
}; };
Q_ENUM(Type); Q_ENUM(Type);

View File

@@ -244,70 +244,75 @@ void MessageContentModel::updateComponents(bool isEditing)
beginResetModel(); beginResetModel();
m_components.clear(); m_components.clear();
EventHandler eventHandler(m_room, m_event); if (eventCast<const Quotient::RoomMessageEvent>(m_event)
if (eventHandler.hasReply()) { && eventCast<const Quotient::RoomMessageEvent>(m_event)->rawMsgtype() == QStringLiteral("m.key.verification.request")) {
if (m_room->findInTimeline(eventHandler.getReplyId()) == m_room->historyEdge()) { m_components += MessageComponent{MessageComponentType::Verification, QString(), {}};
m_components += MessageComponent{MessageComponentType::ReplyLoad, QString(), {}};
m_room->loadReply(m_event->id(), eventHandler.getReplyId());
} else {
m_components += MessageComponent{MessageComponentType::Reply, QString(), {}};
}
}
if (isEditing) {
m_components += MessageComponent{MessageComponentType::Edit, QString(), {}};
} else if (m_event->isRedacted()) {
m_components += MessageComponent{MessageComponentType::Text, QString(), {}};
} else { } else {
if (eventHandler.messageComponentType() == MessageComponentType::Text) { EventHandler eventHandler(m_room, m_event);
const auto event = eventCast<const Quotient::RoomMessageEvent>(m_event); if (eventHandler.hasReply()) {
auto body = EventHandler::rawMessageBody(*event); if (m_room->findInTimeline(eventHandler.getReplyId()) == m_room->historyEdge()) {
m_components.append(TextHandler().textComponents(body, EventHandler::messageBodyInputFormat(*event), m_room, event, event->isReplaced())); m_components += MessageComponent{MessageComponentType::ReplyLoad, QString(), {}};
} else if (eventHandler.messageComponentType() == MessageComponentType::File) { m_room->loadReply(m_event->id(), eventHandler.getReplyId());
m_components += MessageComponent{MessageComponentType::File, QString(), {}}; } else {
if (m_emptyItinerary) { m_components += MessageComponent{MessageComponentType::Reply, QString(), {}};
Quotient::FileTransferInfo fileTransferInfo; }
if (auto event = eventCast<const Quotient::RoomMessageEvent>(m_event)) { }
if (event->hasFileContent()) {
if (isEditing) {
m_components += MessageComponent{MessageComponentType::Edit, QString(), {}};
} else if (m_event->isRedacted()) {
m_components += MessageComponent{MessageComponentType::Text, QString(), {}};
} else {
if (eventHandler.messageComponentType() == MessageComponentType::Text) {
const auto event = eventCast<const Quotient::RoomMessageEvent>(m_event);
auto body = EventHandler::rawMessageBody(*event);
m_components.append(TextHandler().textComponents(body, EventHandler::messageBodyInputFormat(*event), m_room, event, event->isReplaced()));
} else if (eventHandler.messageComponentType() == MessageComponentType::File) {
m_components += MessageComponent{MessageComponentType::File, QString(), {}};
if (m_emptyItinerary) {
Quotient::FileTransferInfo fileTransferInfo;
if (auto event = eventCast<const Quotient::RoomMessageEvent>(m_event)) {
if (event->hasFileContent()) {
fileTransferInfo = m_room->fileTransferInfo(event->id());
}
}
if (auto event = eventCast<const Quotient::StickerEvent>(m_event)) {
fileTransferInfo = m_room->fileTransferInfo(event->id()); fileTransferInfo = m_room->fileTransferInfo(event->id());
} }
}
if (auto event = eventCast<const Quotient::StickerEvent>(m_event)) {
fileTransferInfo = m_room->fileTransferInfo(event->id());
}
#ifndef Q_OS_ANDROID #ifndef Q_OS_ANDROID
KSyntaxHighlighting::Repository repository; KSyntaxHighlighting::Repository repository;
const auto definitionForFile = repository.definitionForFileName(fileTransferInfo.localPath.toString()); const auto definitionForFile = repository.definitionForFileName(fileTransferInfo.localPath.toString());
if (definitionForFile.isValid() || QFileInfo(fileTransferInfo.localPath.path()).suffix() == QStringLiteral("txt")) { if (definitionForFile.isValid() || QFileInfo(fileTransferInfo.localPath.path()).suffix() == QStringLiteral("txt")) {
QFile file(fileTransferInfo.localPath.path()); QFile file(fileTransferInfo.localPath.path());
file.open(QIODevice::ReadOnly); file.open(QIODevice::ReadOnly);
m_components += MessageComponent{MessageComponentType::Code, m_components += MessageComponent{MessageComponentType::Code,
QString::fromStdString(file.readAll().toStdString()), QString::fromStdString(file.readAll().toStdString()),
{{QStringLiteral("class"), definitionForFile.name()}}}; {{QStringLiteral("class"), definitionForFile.name()}}};
} }
#endif #endif
if (FileType::instance().fileHasImage(fileTransferInfo.localPath)) { if (FileType::instance().fileHasImage(fileTransferInfo.localPath)) {
QImageReader reader(fileTransferInfo.localPath.path()); QImageReader reader(fileTransferInfo.localPath.path());
m_components += MessageComponent{MessageComponentType::Pdf, QString(), {{QStringLiteral("size"), reader.size()}}}; m_components += MessageComponent{MessageComponentType::Pdf, QString(), {{QStringLiteral("size"), reader.size()}}};
}
} else {
updateItineraryModel();
if (m_itineraryModel != nullptr) {
m_components += MessageComponent{MessageComponentType::Itinerary, QString(), {}};
}
} }
} else { } else {
updateItineraryModel(); m_components += MessageComponent{eventHandler.messageComponentType(), QString(), {}};
if (m_itineraryModel != nullptr) {
m_components += MessageComponent{MessageComponentType::Itinerary, QString(), {}};
}
} }
} else {
m_components += MessageComponent{eventHandler.messageComponentType(), QString(), {}};
} }
}
if (m_linkPreviewer != nullptr) { if (m_linkPreviewer != nullptr) {
if (m_linkPreviewer->loaded()) { if (m_linkPreviewer->loaded()) {
m_components += MessageComponent{MessageComponentType::LinkPreview, QString(), {}}; m_components += MessageComponent{MessageComponentType::LinkPreview, QString(), {}};
} else { } else {
m_components += MessageComponent{MessageComponentType::LinkPreviewLoad, QString(), {}}; m_components += MessageComponent{MessageComponentType::LinkPreviewLoad, QString(), {}};
}
} }
} }

View File

@@ -213,6 +213,14 @@ DelegateChooser {
} }
} }
DelegateChoice {
roleValue: MessageComponentType.Verification
delegate: MimeComponent {
mimeIconSource: "security-high"
label: i18n("%1 started a user verification", model.author.escapedDisplayName)
}
}
DelegateChoice { DelegateChoice {
roleValue: MessageComponentType.Other roleValue: MessageComponentType.Other
delegate: Item {} delegate: Item {}