From 659e36b113158ba9870e201dab7098888bf9d275 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 14 Dec 2019 17:08:36 +0100 Subject: Update to c++17 --- src/timeline/TimelineModel.cpp | 157 ++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 79 deletions(-) (limited to 'src/timeline/TimelineModel.cpp') diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index e49fcf57..1e069d50 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -117,17 +117,17 @@ eventFormattedBody(const mtx::events::RoomEvent &e) } template -boost::optional +std::optional eventEncryptionInfo(const mtx::events::Event &) { - return boost::none; + return std::nullopt; } template auto eventEncryptionInfo(const mtx::events::RoomEvent &e) -> std::enable_if_t< - std::is_same>::value, - boost::optional> + std::is_same>::value, + std::optional> { return e.content.file; } @@ -407,7 +407,7 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj } eventOrder[idx] = event_id; auto ev = events.value(txn_id); - ev = boost::apply_visitor( + ev = std::visit( [event_id](const auto &e) -> mtx::events::collections::TimelineEvents { auto eventCopy = e; eventCopy.event_id = event_id.toStdString(); @@ -483,29 +483,30 @@ TimelineModel::data(const QModelIndex &index, int role) const mtx::events::collections::TimelineEvents event = events.value(id); - if (auto e = boost::get>(&event)) { + if (auto e = + std::get_if>(&event)) { event = decryptEvent(*e).event; } switch (role) { case Section: { - QDateTime date = boost::apply_visitor( - [](const auto &e) -> QDateTime { return eventTimestamp(e); }, event); + QDateTime date = + std::visit([](const auto &e) -> QDateTime { return eventTimestamp(e); }, event); date.setTime(QTime()); QString userId = - boost::apply_visitor([](const auto &e) -> QString { return senderId(e); }, event); + std::visit([](const auto &e) -> QString { return senderId(e); }, event); for (int r = index.row() - 1; r > 0; r--) { auto tempEv = events.value(eventOrder[r]); - QDateTime prevDate = boost::apply_visitor( + QDateTime prevDate = std::visit( [](const auto &e) -> QDateTime { return eventTimestamp(e); }, tempEv); prevDate.setTime(QTime()); if (prevDate != date) return QString("%2 %1").arg(date.toMSecsSinceEpoch()).arg(userId); - QString prevUserId = boost::apply_visitor( - [](const auto &e) -> QString { return senderId(e); }, tempEv); + QString prevUserId = + std::visit([](const auto &e) -> QString { return senderId(e); }, tempEv); if (userId != prevUserId) break; } @@ -513,62 +514,61 @@ TimelineModel::data(const QModelIndex &index, int role) const return QString("%1").arg(userId); } case UserId: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return senderId(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return senderId(e); }, event)); case UserName: - return QVariant(displayName(boost::apply_visitor( - [](const auto &e) -> QString { return senderId(e); }, event))); + return QVariant(displayName( + std::visit([](const auto &e) -> QString { return senderId(e); }, event))); case Timestamp: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QDateTime { return eventTimestamp(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QDateTime { return eventTimestamp(e); }, event)); case Type: - return QVariant(boost::apply_visitor( + return QVariant(std::visit( [](const auto &e) -> qml_mtx_events::EventType { return toRoomEventType(e); }, event)); case Body: - return QVariant(utils::replaceEmoji(boost::apply_visitor( - [](const auto &e) -> QString { return eventBody(e); }, event))); + return QVariant(utils::replaceEmoji( + std::visit([](const auto &e) -> QString { return eventBody(e); }, event))); case FormattedBody: return QVariant( utils::replaceEmoji( - utils::linkifyMessage(boost::apply_visitor( + utils::linkifyMessage(std::visit( [](const auto &e) -> QString { return eventFormattedBody(e); }, event))) .remove("") .remove("")); case Url: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return eventUrl(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return eventUrl(e); }, event)); case ThumbnailUrl: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return eventThumbnailUrl(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return eventThumbnailUrl(e); }, event)); case Filename: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return eventFilename(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return eventFilename(e); }, event)); case Filesize: - return QVariant(boost::apply_visitor( + return QVariant(std::visit( [](const auto &e) -> QString { return utils::humanReadableFileSize(eventFilesize(e)); }, event)); case MimeType: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return eventMimeType(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return eventMimeType(e); }, event)); case Height: - return QVariant(boost::apply_visitor( - [](const auto &e) -> qulonglong { return eventHeight(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> qulonglong { return eventHeight(e); }, event)); case Width: - return QVariant(boost::apply_visitor( - [](const auto &e) -> qulonglong { return eventWidth(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> qulonglong { return eventWidth(e); }, event)); case ProportionalHeight: - return QVariant(boost::apply_visitor( - [](const auto &e) -> double { return eventPropHeight(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> double { return eventPropHeight(e); }, event)); case Id: return id; case State: // only show read receipts for messages not from us - if (boost::apply_visitor([](const auto &e) -> QString { return senderId(e); }, - event) + if (std::visit([](const auto &e) -> QString { return senderId(e); }, event) .toStdString() != http::client()->user_id().to_string()) return qml_mtx_events::Empty; else if (failed.contains(id)) @@ -582,20 +582,20 @@ TimelineModel::data(const QModelIndex &index, int role) const return qml_mtx_events::Received; case IsEncrypted: { auto tempEvent = events[id]; - return boost::get>( - &tempEvent) != nullptr; + return std::holds_alternative< + mtx::events::EncryptedEvent>(tempEvent); } case ReplyTo: { - QString evId = boost::apply_visitor( - [](const auto &e) -> QString { return eventRelatesTo(e); }, event); + QString evId = + std::visit([](const auto &e) -> QString { return eventRelatesTo(e); }, event); return QVariant(evId); } case RoomName: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return eventRoomName(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return eventRoomName(e); }, event)); case RoomTopic: - return QVariant(boost::apply_visitor( - [](const auto &e) -> QString { return eventRoomTopic(e); }, event)); + return QVariant( + std::visit([](const auto &e) -> QString { return eventRoomTopic(e); }, event)); default: return QVariant(); } @@ -646,13 +646,12 @@ TimelineModel::updateLastMessage() { for (auto it = eventOrder.rbegin(); it != eventOrder.rend(); ++it) { auto event = events.value(*it); - if (auto e = boost::get>( + if (auto e = std::get_if>( &event)) { event = decryptEvent(*e).event; } - if (!boost::apply_visitor([](const auto &e) -> bool { return isMessage(e); }, - event)) + if (!std::visit([](const auto &e) -> bool { return isMessage(e); }, event)) continue; auto description = utils::getMessageDescription( @@ -668,8 +667,7 @@ TimelineModel::internalAddEvents( { std::vector ids; for (auto e : timeline) { - QString id = - boost::apply_visitor([](const auto &e) -> QString { return eventId(e); }, e); + QString id = std::visit([](const auto &e) -> QString { return eventId(e); }, e); if (this->events.contains(id)) { this->events.insert(id, e); @@ -679,12 +677,12 @@ TimelineModel::internalAddEvents( } if (auto redaction = - boost::get>(&e)) { + std::get_if>(&e)) { QString redacts = QString::fromStdString(redaction->redacts); auto redacted = std::find(eventOrder.begin(), eventOrder.end(), redacts); if (redacted != eventOrder.end()) { - auto redactedEvent = boost::apply_visitor( + auto redactedEvent = std::visit( [](const auto &ev) -> mtx::events::RoomEvent { mtx::events::RoomEvent @@ -707,11 +705,11 @@ TimelineModel::internalAddEvents( } if (auto event = - boost::get>(&e)) { + std::get_if>(&e)) { e = decryptEvent(*event).event; } - auto encInfo = boost::apply_visitor( - [](const auto &ev) -> boost::optional { + auto encInfo = std::visit( + [](const auto &ev) -> std::optional { return eventEncryptionInfo(ev); }, e); @@ -947,11 +945,12 @@ void TimelineModel::replyAction(QString id) { auto event = events.value(id); - if (auto e = boost::get>(&event)) { + if (auto e = + std::get_if>(&event)) { event = decryptEvent(*e).event; } - RelatedInfo related = boost::apply_visitor( + RelatedInfo related = std::visit( [](const auto &ev) -> RelatedInfo { RelatedInfo related_ = {}; related_.quoted_user = QString::fromStdString(ev.sender); @@ -959,10 +958,10 @@ TimelineModel::replyAction(QString id) return related_; }, event); - related.type = mtx::events::getMessageType(boost::apply_visitor( - [](const auto &e) -> std::string { return eventMsgType(e); }, event)); - related.quoted_body = boost::apply_visitor( - [](const auto &e) -> QString { return eventFormattedBody(e); }, event); + related.type = mtx::events::getMessageType( + std::visit([](const auto &e) -> std::string { return eventMsgType(e); }, event)); + related.quoted_body = + std::visit([](const auto &e) -> QString { return eventFormattedBody(e); }, event); related.quoted_body.remove(QRegularExpression( ".*", QRegularExpression::DotMatchesEverythingOption)); nhlog::ui()->debug("after replacement: {}", related.quoted_body.toStdString()); @@ -1396,7 +1395,7 @@ TimelineModel::processOnePendingMessage() QString txn_id_qstr = pending.first(); auto event = events.value(txn_id_qstr); - boost::apply_visitor(SendMessageVisitor{txn_id_qstr, this}, event); + std::visit(SendMessageVisitor{txn_id_qstr, this}, event); } void @@ -1405,7 +1404,7 @@ TimelineModel::addPendingMessage(mtx::events::collections::TimelineEvents event) internalAddEvents({event}); QString txn_id_qstr = - boost::apply_visitor([](const auto &e) -> QString { return eventId(e); }, event); + std::visit([](const auto &e) -> QString { return eventId(e); }, event); beginInsertRows(QModelIndex(), static_cast(this->eventOrder.size()), static_cast(this->eventOrder.size())); @@ -1423,22 +1422,22 @@ TimelineModel::saveMedia(QString eventId) const { mtx::events::collections::TimelineEvents event = events.value(eventId); - if (auto e = boost::get>(&event)) { + if (auto e = + std::get_if>(&event)) { event = decryptEvent(*e).event; } - QString mxcUrl = - boost::apply_visitor([](const auto &e) -> QString { return eventUrl(e); }, event); + QString mxcUrl = std::visit([](const auto &e) -> QString { return eventUrl(e); }, event); QString originalFilename = - boost::apply_visitor([](const auto &e) -> QString { return eventFilename(e); }, event); + std::visit([](const auto &e) -> QString { return eventFilename(e); }, event); QString mimeType = - boost::apply_visitor([](const auto &e) -> QString { return eventMimeType(e); }, event); + std::visit([](const auto &e) -> QString { return eventMimeType(e); }, event); - using EncF = boost::optional; + using EncF = std::optional; EncF encryptionInfo = - boost::apply_visitor([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event); + std::visit([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event); - qml_mtx_events::EventType eventType = boost::apply_visitor( + qml_mtx_events::EventType eventType = std::visit( [](const auto &e) -> qml_mtx_events::EventType { return toRoomEventType(e); }, event); QString dialogTitle; @@ -1500,18 +1499,18 @@ TimelineModel::cacheMedia(QString eventId) { mtx::events::collections::TimelineEvents event = events.value(eventId); - if (auto e = boost::get>(&event)) { + if (auto e = + std::get_if>(&event)) { event = decryptEvent(*e).event; } - QString mxcUrl = - boost::apply_visitor([](const auto &e) -> QString { return eventUrl(e); }, event); + QString mxcUrl = std::visit([](const auto &e) -> QString { return eventUrl(e); }, event); QString mimeType = - boost::apply_visitor([](const auto &e) -> QString { return eventMimeType(e); }, event); + std::visit([](const auto &e) -> QString { return eventMimeType(e); }, event); - using EncF = boost::optional; + using EncF = std::optional; EncF encryptionInfo = - boost::apply_visitor([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event); + std::visit([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event); // If the message is a link to a non mxcUrl, don't download it if (!mxcUrl.startsWith("mxc://")) { -- cgit 1.5.1